Go アプリが基礎となる OS に発行するすべての書き込み/読み取りをログに記録し、(可能であれば) FS をメモリにのみ存在するものに完全に置き換えたいと考えています。
出来ますか?どのように?たぶん、すぐに使えるソリューションがありますか?
Go アプリが基礎となる OS に発行するすべての書き込み/読み取りをログに記録し、(可能であれば) FS をメモリにのみ存在するものに完全に置き換えたいと考えています。
出来ますか?どのように?たぶん、すぐに使えるソリューションがありますか?
これは、Andrew Gerrand のGo について (おそらく) 知らない 10 のことからそのまま引用したものです。
var fs fileSystem = osFS{}
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 implements fileSystem using the local disk.
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
ます (他のタイプに埋め込むかnil
、デフォルトのファイルシステムを指定することができます)。
テスト中にファイルシステムをモックアウトする問題を解決したい場合は、@spf13 の Afero ライブラリ、https: //github.com/spf13/afero をチェックしてください。受け入れられた回答が行うすべてのことを行いますが、より良いドキュメントと例があります。
testing/fstest
パッケージを使用できます:
package main
import "testing/fstest"
func main() {
fs := fstest.MapFS{
"hello.txt": {
Data: []byte("hello, world"),
},
}
data, err := fs.ReadFile("hello.txt")
if err != nil {
panic(err)
}
println(string(data) == "hello, world")
}
この問題についてグーグルで検索すると、この質問がかなり高くポップアップするからです。
読み取りと書き込みのログ記録についてはわかりませんが、メモリ内にのみ存在するファイルシステムの場合、blang/vfsを見つけました。私は本番環境では使用していませんが、アルファ版であり、インターフェイスが変更される可能性が高いと書かれています。ご自身の責任で使用してください。
読み取りと書き込みをログに記録するように実装できると思います。