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