init関数が実行される順番

パッケージ初期化で利用される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]
  1. importされた init_testパッケージ 内の init関数 が実行されています。
  2. mainパッケージ内の init関数 が実行されています。
  3. mainパッケージ内の main関数 が実行されています。

参考

よかったらシェアしてね!
目次