-->

什么是关键字VAR后下划线和接口的名字是什么意思?(What does an underscore

2019-06-18 18:37发布

从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 58

func (boolType) String() string { return "Bool" }

func (boolType) ConvertValue(src interface{}) (Value, error) {....}

我知道,ValueConverter是一个接口的名称。 58号线,似乎宣告boolType实现接口ValueConverter,但有必要吗? 我删除线58和代码运行良好。

Answer 1:

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

它是当开发一个方便的构建体和一个接口和/或通过一个类型实现的方法的方法集频繁改变。 该构建体作为防止忘记匹配类型和接口,其中目的是使它们兼容的的方法集的后卫。 它有效地防止了go install有这种遗漏一个破碎的(中间)版本。



Answer 2:

好像你正在创建类型的虚拟值ValueConverter ,分配一个新的boolType对象,然后将其丢弃(这是在旅途中下划线的含义,如for _, elt := range myRange { ...}如果你不感兴趣的枚举的指数)。

我的猜测是,它简单地对应静态检查,以确保结构boolType确实实现了ValueConverter接口。 这样,当你改变的实施boolType ,编译器会,如果你打破的实施抱怨早ValueConverter界面,这将是无法施展你的新boolType到该接口。



文章来源: What does an underscore and interface name after keyword var mean?