Golang の混合代入と宣言における変数のシャドウイング
Go で := 演算子を使用すると、値を代入するときに予期しない動作が発生する可能性があります。変数。宣言と代入を同時に行うことができますが、変数のシャドウイングが発生する可能性もあります。
変数のシャドウイング
内部スコープ内の既存の変数で := が使用される場合、新しい値と型がその変数に関連付けられます。これは、元の変数がそのスコープ内で事実上隠蔽されることを意味します。
デモ
a := 1 { a, b := 2, 3 } // This code will result in a compiler error because 'a' is already declared in the outer scope.
この例では、内部スコープは変数 a を再宣言しようとします。は外側のスコープですでに宣言されています。これは許可されていないため、コンパイラ エラーが発生します。
解決策
変数のシャドウイングを回避するには、いくつかの方法があります。
一貫性のない動作
この問題は次の場所でも発生する可能性があります。内部スコープで変数を気づかずに宣言するとリバースしてしまうit.
デモ
if _, err := fmt.Println(n); err != nil { panic(err) } // This code will result in a compiler error because 'err' is undefined.
この例では、err 変数は宣言されていますが、内部スコープで初期化されていません。ただし、外側のスコープは初期化されることを想定しています。
解決策
混合代入と宣言
混合代入と宣言の場合、新しいスコープは作成されません。したがって、シャドウイングは発生しません。
デモ
a := 1 fmt.Println(&a) a, b := 2, 3 fmt.Println(&a) // This code will print the same address for 'a' in both cases.
この例では、変数 b が宣言されて値が割り当てられ、同時に既存の変数 b の値が割り当てられます。変数aが変更されます。 a のアドレスは同じままであり、シャドウイングが発生しなかったことを示しています。
以上がGo の混合代入と宣言で変数シャドーイングはどのように発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。