我从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语言中意味着什么?
答案 0 :(得分:7)
(*T)(nil)
是Conversion。在这种情况下,它代表一个类型为零,即。相同的值,例如
var p *T
之前已经分配了任何内容。
转化的标准语法为T(expr)
,但*
的优先级会错误地绑定
*T(expr)
此语法表示使用一个参数T
取消引用函数expr
的返回值。这就是转换有另一种语法的原因:
(T)(expr)
其中T
当然可以是*U
。因此
(*U)(expr)
是您在Camlistore存储库中看到的通用形式。