syntax - 关键字 var 后面的下划线和接口(interface)名称是什么意思?

标签 syntax interface go underscores

来自 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 是一个接口(interface)名称。第 58 行似乎声明了 boolType 实现了接口(interface) ValueConverter,但这有必要吗?我删除了第 58 行,代码运行良好。

最佳答案

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

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

关于syntax - 关键字 var 后面的下划线和接口(interface)名称是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13194272/

相关文章:

c# - 双泛型函数的语法糖

php - 使用简单表达式初始化 PHP 类属性声明会产生语法错误

c# - 枚举声明中不必要的逗号

assembly - 从 EQU 符号名表示浮点常数

java - 接口(interface)的静态和最终规则

xml - Golang Google 警报 XML 解析

linux - 有的可执行文件在docker中运行后显示 "no such file or directory",有的则不然

c++ - 如何在 Boost Serialization 中创建用于序列化的接口(interface)?

c# - 无法转换异常类型的 COM 对象

go - 供应 Golang 共享存储库