go initの実行順序

Go言語では、init()関数は特別関数であり、プログラムの実行時に、明示的な呼び出しがなくても自動的に呼び出されます。

init()関数の処理順序は次のとおりです。

  1. Goコンパイラは最初にファイルに書かれた順番にパッケージを初期化します。パッケージが他のパッケージをインポートしている場合、はじめにインポートされたパッケージが初期化されてから、現在のパッケージが初期化されます。
  2. init()をネイティブに初期化します
  3. init()をネイティブで日本語に言い換えると

init() 関数はプログラム実行時、1 度だけ実行される点に注意します。パッケージが複数回インポートされた場合でも、init() 関数は 1 度しか実行されません。

以下に init 関数の実行順序を示すサンプルコードを示します。

package main

import (
	"fmt"
)

var packageVar = initializePackageVar()

func initializePackageVar() int {
	fmt.Println("Initializing package-level variable")
	return 42
}

func init() {
	fmt.Println("Executing init() function")
}

func main() {
	fmt.Println("Main function")
}

結果を出力する:

Initializing package-level variable
Executing init() function
Main function

プログラムの実行時には、パッケージレベル変数が初期化され、続いて init() が自動的に呼ばれ、その後 main() が呼び出されます。

bannerAds