Go的每一個原始碼檔都可以定義所屬的初始函式init function。
Init function固定寫為init()
,會在package變數宣告及匯入的package初始化後才執行。一個原始碼檔可有多個init()
,並依宣告順序執行。init()
甚至先於主程式進入點main()
執行。init()
通常是用在程式開始執行前的狀態檢查。
範例環境:
- Go 1.17
範例
範例專案目錄結構如下。
/
├──hello/
│ └──hello.go
├──go.mod
└──main.go
main.go
中有三個init()
;
hello.go
有一個init()
。
main.go
package main
import (
"fmt"
"abc.com/demo/hello"
)
var name string = "main"
func init() {
fmt.Printf("%s-init-1\n", name)
}
func init() {
fmt.Printf("%s-init-2\n", name)
}
func init() {
fmt.Printf("%s-init-3\n", name)
}
func main() {
hello.Hello()
}
hello/hello.go
package hello
import (
"fmt"
)
func init() {
fmt.Println("hello-init")
}
func Hello() {
fmt.Println("Hello world")
}
測試
執行印出以下。
hello-init
main-init-1
main-init-2
main-init-3
Hello world
沒有留言:
張貼留言