init関数とは
init関数はパッケージの初期化するのに使用されます。
例えば、mainパッケージにおいてinit関数を書くと、main関数よりも先にinit関数が実行されます。
また、mainパッケージ以外の場合だと、そのパッケージがimportされたタイミングでinit関数は実行されます。
func init() {
//初期化する時に実行される処理
}
具体的なコード例
最もシンプルな例
package main
import (
"fmt"
)
func init() {
fmt.Println("init関数の処理")
}
func main() {
fmt.Println("main関数の処理")
}
出力結果
init関数の処理
main関数の処理
init関数が複数ある場合
init関数が複数存在する時は、上から順に実行され、全てのinit関数が実行された後にmain関数が実行されます。
package main
import (
"fmt"
)
func init() {
fmt.Println("init関数の処理1")
}
func init() {
fmt.Println("init関数の処理2")
}
func main() {
fmt.Println("main関数の処理")
}
実行結果
init関数の処理1
init関数の処理2
main関数の処理
init関数を別の関数から呼び出すことは不可能
init関数は一般的なGolangの関数と違い、他の関数の中で実行することはできません。
例えば以下のように、main関数の中でinit関数を呼び出そうとするとコンパイルエラーが発生し、プログラムが動きません。
package main
import (
"fmt"
)
func init() {
fmt.Println("init関数の処理1")
}
func main() {
init() // エラー
fmt.Println("main関数の処理")
}
init関数の中で別の関数を呼び出すことはできる
init関数を別の関数で実行することはできませんが、別の関数をinit関数の中で使用することは可能です。
package main
import (
"fmt"
)
func sayHello() {
fmt.Println("Hello")
}
func init() {
sayHello() // 別の関数を呼び出すことは可能
}
func main() {
fmt.Println("World")
}
実行結果
Hello
World