我希望能够记录我的Go应用程序向底层操作系统发出的每一次读/写操作,并且(如果可能的话)将FS完全替换为只驻留在内存中的文件系统.

可能吗?怎样也许有现成的解决方案?

推荐答案

这是Andrew Gerrand的10 things you (probably) don't know about Go:

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表示默认文件系统).

Go相关问答推荐

如何使用Promela建模语言对Golang RWLock进行建模

如何使用Gorilla WebSockets实现Http.Hijacker&;alexedwards/scs/v2

无法使用Segentio;S Kafka-Go连接到融合的Kafka

显示GUI时后台处理功能

确定果朗CSV行中的字节数

当我有外键时,如何使用 GORM 创建数据库的新条目

Go:如何在不加载正文的情况下创建 http 代理通行证

使用反射在Go中递归迭代 struct 体和集合字段

GORM中是否可能自动迁移具有循环关系的表?

Go time.Parse 无效的 ISO 日期

在 Go sync.Map 中,为什么这部分实现不一致或者我误解了什么?

在本地 go 应用程序上获取秘密的正确策略

如何使用泛型将接口转换为指定类型

甚至用天真的洗牌分配?

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

github.com/rs/zerolog 字段的延迟判断

golang jwt.MapClaims 获取用户ID

如何扩充 ResponseWriter 的 Header() 返回的 map

Gin中测试模式有什么用

Golang 中的无实体函数