メモ golang のdefer
defer は便利でよく使うので、特性をちゃんと把握しておく必要がある。
- defer の実行順
package main import ( "fmt" ) func main() { for i:=0; i<3; i++ { fmt.Println("1") defer fmt.Println(fmt.Sprintf("2-%d", i)) fmt.Println("3") } }
結果
1 3 1 3 1 3 2-2 2-1 2-0
ということで、後入先出になってることがわかる。
- 他の関数内のdefer はいつ呼ばれるのか?
package main import ( "fmt" ) func de(s string) { defer fmt.Println(s) } func main() { for i:=0; i<3; i++ { fmt.Println("1") de("2") } }
結果
1 2 1 2 1 2
となった。 関数のスコープを抜ける時に呼ばれるらしい。 なるほど。
この辺は、ドキュメントにも書いてあると思うが、
簡単な実験で挙動を確認できるので、サンプルを書いてみると良いと思う。
続けていこう。