go initの実行順序
Go言語では、init()関数は特別関数であり、プログラムの実行時に、明示的な呼び出しがなくても自動的に呼び出されます。
init()関数の処理順序は次のとおりです。
- Goコンパイラは最初にファイルに書かれた順番にパッケージを初期化します。パッケージが他のパッケージをインポートしている場合、はじめにインポートされたパッケージが初期化されてから、現在のパッケージが初期化されます。
- init()をネイティブに初期化します
- 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() が呼び出されます。