Go語言之包初始化

在之前的例子中提到過初始化的順序問題和init函數:

學習RadonDB源碼(一)

觀察一下下面的兩段代碼:

a.go:

package main

import "fmt"

var _ = a()

func a() int {
    fmt.Println("this is a file!")
    return 1
}

func init() {
    fmt.Println("init a file!")
}

runner.go:

package main

import "fmt"

var _ = r()

func r() int {
    fmt.Println("this is main!")
    return 1
}

func init() {
    fmt.Println("init main file")
}

func main() {
    fmt.Println("this is main function!")
}

這兩個文件在同一個包下面,根據之前說的原則,首先應該初始化的是包級別的變量,也就是說,執行後會首先打印:

//這裏順序是以我的輸入順序爲準的
this is a file!
this is main!

然後就會進入init函數,因此之後的打印應該是:

//打印順序同上
init a file!
init main file

最後纔會進入main函數,打印this is main function!

我的命令一定是這樣的

go run a.go runner.go

如果我調換兩個go文件的順序,那麼打印的順序也就會發生相應的變化了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章