パッケージ初期化で利用されるinit関数がどのタイミングで実行されるのか確認します。
目次
動作確認コード
以下、mainパッケージの処理です。
package main
import (
"fmt"
"sample/init_test"
)
func init() {
fmt.Println("main init()")
}
func main() {
fmt.Println("main main()")
init_test.Echo()
}
以下、init_testパッケージ内の処理です。init関数 で test2変数 の初期化をしています。
package init_test
import "fmt"
var (
test1 = "aaa"
test2 []int
)
func init() {
const max = 3
test2 = make([]int, max)
for i := 0; i < max; i++ {
test2[i] = i * 10
}
fmt.Printf("init_test init() test1=%v test2=%v\n", test1, test2)
}
func Echo() {
fmt.Printf("init_test Echo() test1=%v test2=%v\n", test1, test2)
}
実行結果
init_test init() test1=aaa test2=[0 10 20]
main init()
main main()
init_test Echo() test1=aaa test2=[0 10 20]
- importされた init_testパッケージ 内の init関数 が実行されています。
- mainパッケージ内の init関数 が実行されています。
- mainパッケージ内の main関数 が実行されています。