網頁

2022/1/20

Golang 初始函式 init function

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")
}

github


測試

執行印出以下。

hello-init
main-init-1
main-init-2
main-init-3
Hello world


沒有留言:

張貼留言