deferのclosureではまってしまったのでメモ。カウントした結果を出力したかった。以下はダメなコード。
ダメなコードその1
func ng() {
c := 0
defer fmt.Println("ng", "c=", c)
for i := 0; i < 10; i++ {
c++
}
}
これは0が出力される。
ng c= 0
ダメなコードその2
forのときと同じ気持ちで関数で受け渡す形にしてもダメ。
func ng2() {
c := 0
defer func(n int){fmt.Println("ng", "c=", n)}(c)
for i := 0; i < 10; i++ {
c++
}
}
scopeの問題ではないのでそれはそう。
ng c= 0
動くコード
func ok() {
c := 0
defer func(n *int) { fmt.Println("ok", "c=", *n) }(&c)
for i := 0; i < 10; i++ {
c++
}
}
はい。
ok c= 10