Go 的这段代码是做什么的?是继承吗?
What does this snippet of Go do? Is it inheritance?
我正在阅读 a tutorial 使用 Bazil/Fuse 使用 Go 创建文件系统。
在教程中,我看到了下面的例子(具体获取文件系统的Root):
var _ fs.FS = (*FS)(nil)
func (f *FS) Root() (fs.Node, fuse.Error) {
n := &Dir{
archive: f.archive,
}
return n, nil
}
我不理解的具体行是第一行。那到底在做什么?我相信如果我不包含那一行,我可以为这个方法做任何我想要的签名——如果我包含它,我必须匹配他们的特定签名才能覆盖。
谁能准确解释这条线的作用,以及我什么时候想使用它?
这行代码是*FS
类型满足fs.FS
接口的编译时断言。如果断言不正确,编译器会报错:
*FS does not implement fs.FS (missing <method name> method)
像这样一行的典型用途是确保类型满足某个接口,并且包中没有其他代码依赖于满足接口的类型。
该行对程序的执行没有影响
我正在阅读 a tutorial 使用 Bazil/Fuse 使用 Go 创建文件系统。
在教程中,我看到了下面的例子(具体获取文件系统的Root):
var _ fs.FS = (*FS)(nil)
func (f *FS) Root() (fs.Node, fuse.Error) {
n := &Dir{
archive: f.archive,
}
return n, nil
}
我不理解的具体行是第一行。那到底在做什么?我相信如果我不包含那一行,我可以为这个方法做任何我想要的签名——如果我包含它,我必须匹配他们的特定签名才能覆盖。
谁能准确解释这条线的作用,以及我什么时候想使用它?
这行代码是*FS
类型满足fs.FS
接口的编译时断言。如果断言不正确,编译器会报错:
*FS does not implement fs.FS (missing <method name> method)
像这样一行的典型用途是确保类型满足某个接口,并且包中没有其他代码依赖于满足接口的类型。
该行对程序的执行没有影响