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

Syntax 关键字var后面的下划线和接口名称是什么意思?,syntax,interface,go,underscores,Syntax,Interface,Go,Underscores,发件人: 我知道ValueConverter是一个接口名。第58行似乎声明boolType实现接口ValueConverter,但这是必要的吗?我删除了第58行,代码运行良好。它提供了一个静态(编译时)检查boolType是否满足ValueConverter接口。用作变量名称的告诉编译器有效地丢弃RHS值,但如果有任何副作用,则键入检查并计算RHS值,但匿名变量本身不占用任何进程空间 在开发时,它是一个方便的构造,接口的方法集和/或类型实现的方法经常更改。该构造用于防止忘记匹配类型和接口的方法集

发件人:

我知道ValueConverter是一个接口名。第58行似乎声明boolType实现接口ValueConverter,但这是必要的吗?我删除了第58行,代码运行良好。

它提供了一个静态(编译时)检查
boolType
是否满足
ValueConverter
接口。用作变量名称的
告诉编译器有效地丢弃RHS值,但如果有任何副作用,则键入检查并计算RHS值,但匿名变量本身不占用任何进程空间


在开发时,它是一个方便的构造,接口的方法集和/或类型实现的方法经常更改。该构造用于防止忘记匹配类型和接口的方法集,其目的是使它们兼容。它有效地防止了
去安装带有此类遗漏的损坏(中间)版本。

似乎您正在创建类型为
ValueConverter
的虚拟值,为其分配一个新的
boolType
对象,然后丢弃它(这是go中下划线的含义,如如果您对枚举的索引不感兴趣,请参见
for u,elt:=range myRange{…}


我的猜测是,它只是对应于一个静态检查,以确保struct
boolType
确实实现了
ValueConverter
接口。这样,当您更改
boolType
的实现时,如果您在运行时破坏了
ValueConverter
接口的实现,编译器将提前投诉我将无法将新的
boolType
强制转换到此界面。

空白标识符
\u
也可用于严格提供结构中的键。有关参考信息,请参阅
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) {....}