最新のプログラミング言語である Go は、変数の宣言と代入にさまざまな構文を提供します。興味深い点の 1 つは、代入と宣言が混在する動作であり、十分に理解していないと不可解なエラーにつながる可能性があります。
Go では、:= を使用して代入する場合中括弧の使用に関係なく、if ステートメントや for ステートメント内を含む内部スコープ内の変数の場合、基本的には新しいバインディングと型で新しい変数を作成することになります。この現象は「変数シャドーイング」として知られています。シャドウ変数のスコープは、:= で宣言されているブロックに制限されます。
発生した問題は、代入と宣言を混合しようとしたときに発生します。同じ変数です。次の点を考慮してください。
a := 1 { a, b := 2, 3 }
ここで、コンパイラはこれを 'a' を再宣言しようとしていると解釈するため、エラーを発行します。これは、中括弧の内部スコープ内で、新しい変数 'a' が := で宣言され、以前に宣言された元の 'a' をシャドウイングするためです。
この問題を解決するには、いくつかのオプションがあります。
変数のシャドウイングは、内部スコープで意図せずに変数を宣言した逆のシナリオでも発生する可能性があります。例:
if _, err := fmt.Println(n); err != nil { panic(err) } else { fmt.Println(n, "bytes written") }
この場合、変数 'err' はシャドウされており、if ステートメントの外で使用しようとするとエラーが発生します。
もう一度言いますが、変数のシャドウイングを回避するにはいくつかのオプションがあります。問題:
最後の例では、新しい変数を初期化しながら既存の変数に代入する混合代入を示します。新しいスコープを作成しているわけではないので、ここでは「a」をシャドウイングしていません。これは、各代入の前後にアドレスを出力することで確認できます。
ただし、'b' の宣言を省略した場合、コンパイラは、'b' の左側に新しい変数がないことを示すエラーを報告します。 :=。これにより、同じスコープ内で変数を 2 回宣言できないことがわかります。
変数のシャドウイング手法を理解すると、シャドウされた変数を識別するのにも役立ちます。ネストされたスコープ内の変数のアドレスを出力すると、別のアドレスが表示され、1 つの変数がシャドウされたことがわかります。
変数のシャドウイングと混合代入の概念を注意深く理解することで、これらの状況を自信を持って対処できるようになります。 Go コード内の紛らわしいエラーを避けてください。
以上が変数シャドーイングは Go の混合代入と宣言にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。