go 下划线语法(_) 的使用场景

503 阅读1分钟

今天在看kubebuilder生成的代码时,发现类型这样的写法,想起把下划线的使用场景整理下。

var _ webhook.Defaulter = &Latte{}

var _ webhook.Validator = &Latte{}

"_"(下划线),可以简单理解为赋值但以后不再使用

  1. 引入包,会先调用包中的初始化函数,这种使用方式仅让导入的包做初始化,而不使用包中其他功能
import  _  "net/http/pprof"
  1. 用在返回值,表示忽略某个值。单函数有多个返回值,用来获取某个特定的值
for _,v := range Slice{}

_,err := func()
  1. 类似开头的写法,上面用来判断 type T是否实现了I,用作类型断言,如果T没有实现借口I,则编译错误.
type T struct{}
var _ I = T{}

其中 I为interface
  1. 用在函数定义中省略带名的参数。返回多个参数时,尤其是类型相同的,不利于阅读。返回参数 int 加了名字,对比上面,便于理解,但是 "string" 和 "error"没有名字,编译会报错,用下划线可以忽略命名
func demo() ( int, int, string, int ,error)

func demo() ( sumA int, sumB int, _ string, total int ,_ error)