上級 › deferの引数はdefer文を実行した時点の値で評価される › パターン1
deferの引数はdefer文を実行した時点の値で評価される
defer文に渡した関数呼び出しの引数は、実際に関数が実行される(関数の終了時)タイミングではなく、defer文自体が実行された時点で評価され確定します。
1 package main 2 3 import "fmt" 4 5 func main() { 6 x := 1 7 _________________________________ ^ 8 x = 2 9 }
出力: 1
空欄を埋めて実行を通す
defer fmt.Println(x)の引数xは、defer文が実行された時点(まだx=1の時点)で評価され確定してしまいます。関数終了時の最新の値を見たいなら、引数のないクロージャをdeferする必要があります。
次の問題