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

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

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

关键字var后面的下划线和接口名称是什么意思?来自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 boolType type 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贡献1827条经验 获得超7个赞

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

在开发时它是一个方便的构造,并且接口的方法集和/或由类型实现的方法经常被改变。该构造用作防止忘记匹配类型的方法集和用于使它们兼容的接口的方法集。它有效地防止go install了这种遗漏的破碎(中间)版本。


查看完整回答
反对 回复 2019-08-08
?
慕勒3428872

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

看起来你正在创建一个类型的虚拟值,为它ValueConverter分配一个新boolType对象然后丢弃它(这就是go中下划线的含义,for _, elt := range myRange { ...}如果你对枚举的索引不感兴趣)。

我的猜测是它只是对应一个静态检查,以确保结构boolType确实实现了ValueConverter接口。这样,当您更改实现时boolType,如果您破坏了ValueConverter接口的实现,编译器会提前抱怨,因为它将无法将您的新boolType接口转换为此接口。


查看完整回答
反对 回复 2019-08-08
  • 2 回答
  • 0 关注
  • 860 浏览

添加回答

举报

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