一尘不染

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

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


阅读 173

收藏
2020-07-02

共1个答案

一尘不染

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

var p *T

在分配任何东西之前

转换的标准语法为T(expr),但是的优先级*会在

*T(expr)

这种语法意味着T用一个参数取消引用函数的返回值expr。这就是为什么转换具有替代语法的原因:

(T)(expr)

T当然可以在哪里*U。因此

(*U)(expr)

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

2020-07-02