我从 camlistore 看到以下声明(http://code.google.com/p/camlistore/source/browse/pkg/cacher/cacher.go).
var (
_ blobref.StreamingFetcher = (*CachingFetcher)(nil)
_ blobref.SeekFetcher = (*CachingFetcher)(nil)
_ blobref.StreamingFetcher = (*DiskCache)(nil)
_ blobref.SeekFetcher = (*DiskCache)(nil)
)
据我所知,没有创建任何变量,并且这些语句确保编译器检查 CachingFether 是否实现了 StreamingFetcher 和 SeekFetcher 的公共函数。 RHS 部分使用带有 nil 参数的指针构造函数语法。这个语法在Go语言中意味着什么?
(*T)(nil)
is a 转换。在这种情况下,它代表类型为 nil,即。相同的值,例如
var p *T
在给它分配任何东西之前。
转换的标准语法是T(expr)
,但优先级为*
会错误地将其绑定在
*T(expr)
此语法意味着取消引用函数的返回值T
有一个论点expr
。这就是为什么转换有一种替代语法:
(T)(expr)
where T
当然可以*U
。所以
(*U)(expr)
是您在 Camlistore 存储库中看到的通用形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)