go io/fs: fs.Sub(fsys, "no such directory") 是否应该返回一个无法通过 fstest.TestFS 测试的文件系统?

72qzrwbm  于 7个月前  发布在  Go
关注(0)|答案(2)|浏览(64)

你使用的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 以接受什么样的文件系统作为完全空的文件系统。

8iwquhpp

8iwquhpp1#

cc @rsc
这可能是有意为之。如果有人能确认就更好了。
@dchapes 我认为你可以使用fstest.MapFS实现一个空的Map。

bn31dyow

bn31dyow2#

@cherrymui
@dchapes 我认为你可以使用fstest.MapFS实现一个空的文件系统。
哎呀,你确实说得对。感谢你的评论!
我刚刚验证了var fsys fstest.MapFS确实可以与fstest.TestFS正确地一起工作,因为它实现了一个"."目录(顺便说一下,var fsys embed.FS也是如此)。出于某种原因,我原以为即使不检查它也不会这样做。嗯,我只是在做这个练习,看看io/fs的实际接口是如何工作的,所以我短时间内完成的EmptyFS并没有浪费。如果一个空的文件系统在实践中有用,我可能更倾向于一个不需要依赖testing/…的文件系统。

相关问题