上級 › 名前付き戻り値が内側のブロックで:=によりシャドーイングされる › パターン2
名前付き戻り値が内側のブロックで:=によりシャドーイングされる
名前付き戻り値の変数と同じ名前をif文などの内側のブロックで:=を使って再宣言すると、それは別の新しいローカル変数になります。
1 package main 2 3 import "fmt" 4 5 func calc(flag bool) (total int) { 6 if flag { 7 ________________________ ^ 8 } 9 return 10 } 11 12 func main() { 13 fmt.Println(calc(true)) 14 }
出力: 0
空欄を埋めて実行を通す
:=による再宣言はブロックスコープに閉じた別の変数を作るため、ブロックを抜けると外側のtotalは変更されないまま残ります。
次の問題