1. 前言
这几天在看源码的过程中发现作者们都喜欢写大量的_
符号,而这个符号对于我们来说在普通不过了,那它到底还有其他什么用途是我们还没有触及的呢?
今天我们就来聊聊项目中碰到的:_
的使用
2. 第一种用法: 包导入
import ( _ "net/http/pprof" )
上面pprof是比较常见的操作
这种方式在我们项目中经常碰到,当你想用某个包的init函数去初始化某些资源的时候但是又不想引入包的其他资源,那么你就可以这么引入,这样引入只会调用init函数,否则你不加_
会报错的。
3. 第二种用法: 返回值
_, err := callFn()
主要是忽略某个值
这种用法可以说在项目中是非常常见的,因为大多数时候我们只想要去操作资源,只想知道操作之后报错与否,结果并不关心,那么就可以直接_
省略函数返回的结果。
4. 第三种用法: 类型约定
_ schema.Source = &MySource{} _ schema.Source = (*MySource)(nil)
比如判断某个struct是否实现接口的方法
如上所述,schema.Source是一个接口,MySource是一个结构体,那么我们在使用结构体的时候,如果没有实现接口,程序会报错,不让你使用这个结构体,因此在面向接口编程中我们一定要提前去检查某个结构体是否实现了某个接口。
5. 第五种用法: func _()
func _() { var x [1]struct{} _ = x[Default-0] }
函数这种不常见,我们称它为黑洞函数 一个黑洞函数可以被定义多次,并且不能以正常的方式调用。它们有时对测试解析器很有用。
6. 小结
上面四种_
的使用,尤其2,3,4,大家要牢记并且在项目中大胆使用,大家可以看下优秀的源码都是毫无保留的在用了。