一尘不染

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

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


阅读 190

收藏
2021-12-06

共1个答案

一尘不染

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

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

2021-12-06