登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-15 18:44:03 371浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《golang 接口合规性编译类型检查》就很适合你!本篇内容主要包括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 语言中是什么意思?

正确答案

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

var p *T

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

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

*T(expr)

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

(T)(expr)

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

(*U)(expr)

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

本篇关于《golang 接口合规性编译类型检查》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>