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

sat*_*ish 5 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)
)
Run Code Online (Sandbox Code Playgroud)

我知道没有创建变量,并且语句确保编译器检查CachingFether实现StreamingFetcher和SeekFetcher的公共函数.RHS部分使用带有nil参数的指针构造函数语法.这种语法在Go语言中意味着什么?

zzz*_*zzz 7

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

var p *T
Run Code Online (Sandbox Code Playgroud)

在给它分配任何东西之前.

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

*T(expr)
Run Code Online (Sandbox Code Playgroud)

此语法表示T使用一个参数取消引用function的返回值expr.这就是转换具有替代语法的原因:

(T)(expr)
Run Code Online (Sandbox Code Playgroud)

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

(*U)(expr)
Run Code Online (Sandbox Code Playgroud)

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