Go でのファイル システムのモックについて
質問: Go でファイル システムをモックまたは抽象化するにはどうすればよいですか?ファイル操作のログを記録し、メモリ内ファイルを作成する可能性がありますsystem?
答え:
Go でファイル システムをモックまたは抽象化するには、次のアプローチを利用できます:
ファイルとファイルのインターフェイスを定義するファイル システム操作:
type fileSystem interface { Open(name string) (file, error) Stat(name string) (os.FileInfo, error) } type file interface { io.Closer io.Reader io.ReaderAt io.Seeker Stat() (os.FileInfo, error) }
ローカルを使用してデフォルトのファイル システム実装を作成します。ディスク:
type osFS struct{} func (osFS) Open(name string) (file, error) { return os.Open(name) } func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) }
カスタム コードを使用してファイル システム インターフェイスを実装します:
type myFS struct { // Custom file system implementation } func (myFS) Open(name string) (file, error) { // Custom implementation for opening a file // Log the file operation fmt.Printf("Opened file: %s\n", name) // Return a mock file object return &mockFile{}, nil } func (myFS) Stat(name string) (os.FileInfo, error) { // Custom implementation for getting file info // Log the file operation fmt.Printf("Get file info: %s\n", name) // Return mock file info return &os.FileInfo{}, nil }
ファイル システム引数を受け入れるようにコードを変更します:
func myFunc(fs fileSystem) { f, err := fs.Open("myfile.txt") if err != nil { fmt.Println(err) return } // Perform file operations using the mocked file object }
Byカスタム ファイル システム実装を挿入すると、ファイル操作をログに記録し、ファイルとファイル システム インターフェイスを実装してメモリ内ファイル システムを作成できます。
以上がロギングとインメモリ操作のために Go でファイル システムをモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。