中級 › クロージャがループ外の変数を共有キャプチャして最終値しか残らない › パターン5
クロージャがループ外の変数を共有キャプチャして最終値しか残らない
forループの外側で宣言した変数をクロージャの中で使い、そのクロージャをスライスに貯めていく場合、各クロージャは同じ変数を参照し続けます。
1 package main 2 3 import "fmt" 4 5 func main() { 6 var funcs []func() int 7 sum := 0 8 for i := 0; i < 4; i++ { 9 sum += i 10 s := sum 11 _ = s 12 funcs = append(funcs, func() int { return ___ }) ^ 13 } 14 var results []int 15 for _, f := range funcs { 16 results = append(results, f()) 17 } 18 fmt.Println(results) 19 }
出力: [6 6 6 6]ループは4回
空欄を埋めて実行を通す
ループの回数が増えても、共有変数を直接参照している限り全クロージャが同じ最終値を返します。
次の問題