Go init() function


任何檔案可以擁有任意數量的 init() function:

func init() {
    // ...
}

init() 會在程式啟動時自動以宣告的順序執行,但不能被 call 或參考。

假設有以下兩個 go 檔案:

foo.go

package main

import "fmt"

func init() {
    fmt.Println("foo.go first init")
}

main.go

package main

import "fmt"

func init() {
    fmt.Println("main.go first init")
}

func init() {
    fmt.Println("main.go second init")
}

func main() {
}

go run 以不同的順序指定 source file 會有不同結果:

$ go run foo.go main.go
foo.go first init
main.go first init
main.go second init

$ go run main.go foo.go
main.go first init
main.go second init
foo.go first init

# 不指定 file
$ go run .
foo.go first init
main.go first init
main.go second init

不指定 file 的話 go 會將 file 以其名稱排序。

如果嘗試直接 call init() 則會 compile error:

package main

import "fmt"

func init() {
    fmt.Println("main.go first init")
}

func main() {
    init()  // compile error: undefined: init
}
#GO






Related Posts

sigfox開啟全球一個網的物聯網世界

sigfox開啟全球一個網的物聯網世界

用 Nest.js 開發 API 吧 (九) - 總結

用 Nest.js 開發 API 吧 (九) - 總結

前端也能玩 Deep learning - 以 p5-deeplearn-js 為例

前端也能玩 Deep learning - 以 p5-deeplearn-js 為例




Sponsored



Comments