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