下划线(_) 用法
-
忽略返回值
该用方法很常见,不在多说,放一个例子:v, _ := functionName(...)
-
初始化包,但是不使用
该用法也很常见,就是导入包进行初始化(调用init方法),不使用其他能力import _ "test/test"
-
接口断言
该用法是本次重点介绍学习的,该用法主要是在给变量校验是否实现接口,具体看下面例子:type Book interface { GetName() string } type Maths struct { } func(m Maths) GetName() string { return "数学" } type English struct { } func (e *English) GetName() string { return "英语" } var { _ Book = Maths{} //1. 编译通过 _ Book = &Maths{} //2. 编译通过 _ Book = English{} //3. 编译错误 _ Book = &English{} //4. 编译通过 }
这里下划线用来判断结构体是否实现了接口,如果没有实现会在编译的时候报错,把错误提前暴露,而不是等到执行才暴露。
另外,_ Book = English{}
编译不通过这个主要是混用了,值类型以及引用类型,English
地址(引用)实现了Book
定义的接口,而且结构体是值类型。关于值类型和引用类型详见Golang 小知识点集合 -值类型和引用类型