【Golang】init関数の使い方をGoエンジニアが易しく解説

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
タイトルとURLをコピーしました