为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
守候你守候我 2021-06-09 13:00:59
我看到来自 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 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

(*T)(nil)是一个转换。在这种情况下,它代表键入的 nil,即。相同的值,例如

var p *T

有之前分配任何东西给它。

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

*T(expr)

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

(T)(expr)

哪里T当然可以*U。所以

(*U)(expr)

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


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信