从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破损(中间)版本的遗漏。