在 Golang 里, _
(下划線)是個特殊的標識符。
用在 import
在導包的時候,常見這個用法,尤其是項目中使用到 mysql 或者使用 pprof 做性能分析時,比如
import _ "net/http/pprof"
import _ "github.com/go-sql-driver/mysql"
這種用法,會調用包中的init()
函數,讓導入的包做初始化,但是卻不使用包中其他功能。
用在返回值
該用法也是一個常見用法。Golang 中的函數返回值一般是多個,err 通常在返回值最后一個值。但是,有時候函數返回值中的某個值我們不關心,如何接收了這個值但不使用,代碼編譯會報錯,因此需要將其忽略掉。比如
for _, val := range Slice {} _, err := func()
用在變量
type I interface { Sing() } type T struct { } func (t T) Sing() { }// 編譯通過
var _ I = T{}
// 編譯通過
var _ I = &T{}
在這里下划線用來判斷結構體是否實現了接口,如果沒有實現,在編譯的時候就能暴露出問題,如果沒有這個判斷,后代碼中使用結構體沒有實現的接口方法,在編譯器是不會報錯的。