我从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)是一个Conversion。在这种情况下,它代表类型为nil的类型。相同的值,例如
(*T)(nil)
var p *T
在分配任何东西之前
转换的标准语法为T(expr),但是的优先级*会在
T(expr)
*
*T(expr)
这种语法意味着T用一个参数取消引用函数的返回值expr。这就是为什么转换具有替代语法的原因:
T
expr
(T)(expr)
T当然可以在哪里*U。因此
*U
(*U)(expr)
是您在Camlistore存储库中看到的内容的通用形式。