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

我看到来自 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 语言中是什么意思?


守候你守候我
浏览 239回答 1
1回答

喵喵时光机

(*T)(nil)是一个转换。在这种情况下,它代表键入的 nil,即。相同的值,例如var p *T有之前分配任何东西给它。转换的标准语法是T(expr),但是 的优先级*会将其错误地绑定到*T(expr)这种语法意味着T用一个参数取消引用函数的返回值expr。这就是转换具有替代语法的原因:(T)(expr)哪里T当然可以*U。所以(*U)(expr)是您在 Camlistore 存储库中看到的内容的通用形式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go