我看到了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语言中意味着什么?
发布于 2013-08-01 12:50:49
(*T)(nil)是转换。在这种情况下,它代表输入的零.相同的值,例如,
var p *T在给它分配任何东西之前。
转换的标准语法是T(expr),但是*的优先级将错误地绑定在
*T(expr)这个语法意味着用一个参数T取消引用函数expr的返回值。这就是为什么转换有另一种语法:
(T)(expr)当然,T可以是*U。因此
(*U)(expr)是您在Camlistore存储库中看到的广义形式。
https://stackoverflow.com/questions/17994519
复制相似问题