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行,代码运行良好。

最佳答案

它提供了一个静态(编译时)检查,以确保boolType满足ValueConverter接口。用作变量名称的_告诉编译器有效地丢弃RHS值,但要对其进行类型检查并评估它是否有任何副作用,但是匿名变量本身不占用任何进程空间。

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

07-28 13:14