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

关键字var后的下划线和接口名称是什么意思?

关键字var后的下划线和接口名称是什么意思?

Go
HUH函数 2021-05-11 10:29:24
从http://golang.org/src/pkg/database/sql/driver/types.go中:type ValueConverter interface {    // ConvertValue converts a value to a driver Value.    ConvertValue(v interface{}) (Value, error)}var Bool boolTypetype boolType struct{}var _ ValueConverter = boolType{} // line 58func (boolType) String() string { return "Bool" }func (boolType) ConvertValue(src interface{}) (Value, error) {....}我知道ValueConverter是接口名称。第58行似乎声明了boolType实现接口ValueConverter,但这是否必要?我删除了58行,代码运行良好。
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

它提供boolType满足ValueConverter接口的静态(编译时)检查。将_用作变量的名称告诉编译器有效地丢弃的RHS值,但类型检查和评估,如果有任何的副作用,但本身的匿名变量不采取任何进程空间。

在开发中并且接口的方法集和/或由类型实现的方法经常更改时,这是一个方便的构造。该构造可以防止忘记匹配类型和接口的方法集,以使它们兼容。它有效地避免go install了由于这种遗漏而导致版本(中间)损坏的情况。



查看完整回答
反对 回复 2021-05-24
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

好像您正在创建一个type的虚拟值,为其ValueConverter分配一个新boolType对象,然后将其丢弃(这是go中下划线的含义,就像for _, elt := range myRange { ...}您对枚举的索引不感兴趣一样)。

我的猜测是,它仅与静态检查相对应,以确保该结构boolType确实实现了该ValueConverter接口。这样,当您更改的实现时boolType,如果您中断了ValueConverter接口的实现,则编译器将提早投诉,因为它将无法将新的类型boolType转换为该接口。


查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

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