你使用的Go版本是什么( go version
)?
$ go version
go version go1.16.2 freebsd/amd64
这个问题在最新版本的Go中是否重现?
如果你指的是最新的Go版本,那么是的。
如果你指的是 tip
,我不确定,但我预计是这样。
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
[output trimmed]
GO111MODULE=""
GOARCH="amd64"
GOHOSTARCH="amd64"
GOHOSTOS="freebsd"
GOOS="freebsd"
GOVERSION="go1.16.2"
CGO_ENABLED="1"
你做了什么?
fs, err := fs.Sub(someFS, "noSuchDir")
err = fstest.TestFS(fs)
https://play.golang.org/p/eXsqSUYHWQs
你期望看到什么?
没有返回错误。
你看到了什么?
由于缺少空根目录而失败:
prog.go:18: TestFS found errors:
.: Open: open .: file does not exist
这很可能是一个“按预期工作”的问题,如果是这样的话,我为造成的噪音道歉。
FYI:我在尝试实现 fs.Sub
的相反操作时遇到了这个问题。我提供了一个 prefixFS.Sub
作为优化,当子目录不在我的前缀内时返回另一个带有调整前缀的 prefixFS
或在其底层文件系统上调用 fs.Sub
以避免链接多个 Package 器。我还实现了一个 EmptyFS
,当我的子目录不在我的前缀内时返回它,以保持 fstest.TestFS
的满意度。
我想其他实现 fs.SubFS
并尝试测试他们的代码的人会欣赏不必为了满足 fstest.TestFS
而自己创建一个 EmptyFS
。也许可以提供一个空文件系统实现或者可以调整 fstest
以接受什么样的文件系统作为完全空的文件系统。
2条答案
按热度按时间8iwquhpp1#
cc @rsc
这可能是有意为之。如果有人能确认就更好了。
@dchapes 我认为你可以使用fstest.MapFS实现一个空的Map。
bn31dyow2#
@cherrymui
@dchapes 我认为你可以使用fstest.MapFS实现一个空的文件系统。
哎呀,你确实说得对。感谢你的评论!
我刚刚验证了
var fsys fstest.MapFS
确实可以与fstest.TestFS
正确地一起工作,因为它实现了一个"."
目录(顺便说一下,var fsys embed.FS
也是如此)。出于某种原因,我原以为即使不检查它也不会这样做。嗯,我只是在做这个练习,看看io/fs
的实际接口是如何工作的,所以我短时间内完成的EmptyFS
并没有浪费。如果一个空的文件系统在实践中有用,我可能更倾向于一个不需要依赖testing/…
的文件系统。