ホームページ > バックエンド開発 > Golang > Go アプリケーションはファイルシステムの I/O 操作をモックまたは監視できますか?

Go アプリケーションはファイルシステムの I/O 操作をモックまたは監視できますか?

DDD
リリース: 2024-12-04 12:13:11
オリジナル
871 人が閲覧しました

Can Go Applications Mock or Monitor Filesystem I/O Operations?

Go でのファイルシステムのモック化と抽象化

質問:
I/O を監視することは可能ですか?基盤となるファイルシステム上で Go アプリケーションによって実行される操作?さらに、物理ファイルシステムをメモリ内の対応するものに置き換えることはできますか?

答え:
はい、Go でファイルシステムを抽象化してモックすることができます。 Andrew Gerrand の洞察に触発されたアプローチは次のとおりです。

重要なファイル システム操作を表すファイル システム インターフェイスを定義します。

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)
}
ログイン後にコピー

ローカルを利用するデフォルトの osFS タイプを実装します。ディスク:

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) }
ログイン後にコピー

アプリケーション コードで、fileSystem インターフェイスを引数として渡すか、ラッパー タイプ内に埋め込みます:

func myFunc(fs fileSystem) {
    f, err := fs.Open("my_file.txt")
    ...
}
ログイン後にコピー

メモリ内ファイル システムを使用するには、 fileSystem インターフェイスを実装し、ファイルを内部データ構造に保存する MemoryFS タイプ。これにより、モック ファイルシステムの使用中にすべての I/O イベントをインターセプトしてログに記録できるようになります:

type memoryFS struct {
    files map[string][]byte
}

func (mfs memoryFS) Open(name string) (file, error) {
    ...
}

func (mfs memoryFS) Stat(name string) (os.FileInfo, error) {
    ...
}
ログイン後にコピー

以上がGo アプリケーションはファイルシステムの I/O 操作をモックまたは監視できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート