Go語言 “ _ ”(下劃線)
Go語言 “ _ ”(下劃線)
“_”是特殊識別符號,用來忽略結果。
1.下劃線在import中
在Golang裡,import的作用是匯入其他package。
import 下劃線(如:import _ hello/imp)的作用:當匯入一個包時,該包下的檔案裡所有init()函式都會被執行,然而,有些時候我們並不需要把整個包都匯入進來,僅僅是是希望它執行init()函式而已。這個時候就可以使用 import _ 引用該包。即使用【import _ 包路徑】只是引用該包,僅僅是為了呼叫init()函式,所以無法通過包名來呼叫包中的其他函式。
示例:
程式碼結構:
src | +--- main.go | +--- hello | +--- hello.go
main.go
package main import _ "./hello" func main() { // hello.Print() //編譯報錯:./main.go:6:5: undefined: hello }
hello.go
package hello import "fmt" func init() { fmt.Println("imp-init() come here.") } func Print() { fmt.Println("Hello!") }
輸出結果:
imp-init() come here.
2.下劃線在程式碼中
package main import ( "os" ) func main() { buf := make([]byte, 1024) f, _ := os.Open("/Users/***/Desktop/text.txt") defer f.Close() for { n, _ := f.Read(buf) if n == 0 { break } os.Stdout.Write(buf[:n]) } }
解釋1:
下劃線意思是忽略這個變數. 比如os.Open,返回值為*os.File,error 普通寫法是f,err := os.Open("xxxxxxx") 如果此時不需要知道返回的錯誤值 就可以用f, _ := os.Open("xxxxxx") 如此則忽略了error變數
解釋2:
佔位符,意思是那個位置本應賦給某個值,但是咱們不需要這個值。 所以就把該值賦給下劃線,意思是丟掉不要。 這樣編譯器可以更好的優化,任何型別的單個值都可以丟給下劃線。 這種情況是佔位用的,方法返回兩個結果,而你只想要一個結果。 那另一個就用 "_" 佔位,而如果用變數的話,不使用,編譯器是會報錯的。
補充:
import "database/sql" import _ "github.com/go-sql-driver/mysql"
第二個import就是不直接使用mysql包,只是執行一下這個包的init函式,把mysql的驅動註冊到sql包裡,然後程式裡就可以使用sql包來訪問mysql資料庫了。