golang接口合规性编译类型检查

时间:2013-08-01 12:47:21

标签: pointers interface go

我从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语言中意味着什么?

1 个答案:

答案 0 :(得分:7)

(*T)(nil)Conversion。在这种情况下,它代表一个类型为零,即。相同的值,例如

var p *T

之前已经分配了任何内容。

转化的标准语法为T(expr),但*的优先级会错误地绑定

*T(expr)

此语法表示使用一个参数T取消引用函数expr的返回值。这就是转换有另一种语法的原因:

(T)(expr)

其中T当然可以是*U。因此

(*U)(expr)

是您在Camlistore存储库中看到的通用形式。