Go中的下劃線

1.下劃線在import中

  在Golang裏,import的作用是導入其他package,但是今天在看beego框架時看到了import 下劃線,不知其意,故百度而解之。

  import 下劃線(如:import _ hello/imp)的作用:當導入一個包時,該包下的文件裏所有init()函數都會被執行,然而,有些時候我們並不需要把整個包都導入進來,僅僅是是希望它執行init()函數而已。這個時候就可以使用 import _ 引用該包。即使用【import _ 包路徑】只是引用該包,僅僅是爲了調用init()函數,所以無法通過包名來調用包中的其他函數。
示例:
代碼結構
這裏寫圖片描述
main.go

package main

import _ "hello/imp"

func main() {
    //imp.Print() //編譯報錯,說:undefined: imp
}

init.go

package imp

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/samchen/Music/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數據庫了。

發佈了124 篇原創文章 · 獲贊 17 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章