関数が戻り値の時に、どういう流れで初期化されているのか確認してみた
関数を返す前までの準備はされた上で、関数が戻り値として帰る。その戻った関数が実行されるのは、それが実行される時(わかりにくい表現だなぁ)
closure.go
package main
import "fmt"
func intSeq() func() int {
i := 0
fmt.Println("init")
return func() int {
i += 1
return i
}
}
func main() {
fmt.Println("before init")
nextInt := intSeq()
fmt.Println("after init")
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
newInts := intSeq()
fmt.Println(newInts())
}
結果
before init
init
after init
1
2
3
init
1