Go では、変数のスコープは、変数が宣言されているコード ブロックに制限されます。これは、if ステートメントの結果に依存する変数を操作するときに問題を引き起こす可能性があります。次の状況を考えてみましょう:
問題:
変数のスコープが if ブロックに制限されているため、if ステートメント内で変数を作成し、後でそれを使用することは制限されています。
例コード:
if len(array1) > len(array2) { new1 := make([]string, 0, len(array1)) // Code using new1 } new2 := make([]string, 0, len(new1)) // Error: new1 out of scope copy(new2, new1)
提案された解決策:
無意味な変数を使用して if ステートメントの結果を保存し、その値を使用して目的のステートメントを宣言します。変数。
var pointlessvariable uint if len(array1) > len(array2) { pointlessvariable = len(array1) } else { pointlessvariable = len(array2) } var new1 = make([]string, 0, pointlessvariable) if len(array1) > len(array2) { // Code using new1 } new2 := make([]string, 0, len(new1)) copy(new2, new1)
より良い解決策:
if ブロックの外で変数を宣言し、if ステートメント内で make 関数を使用して変数を初期化します。
var new1 []string if len(array1) > len(array2) { new1 = make([]string, 0, len(array1)) // Code using new1 } else { new1 = make([]string, 0, len(array2)) // Other code using new1 } new2 := make([]string, 0, len(new1)) copy(new2, new1)
この後者のアプローチは、次のようなクリーンでエレガントなソリューションを提供します。混乱を招く変数や不必要な変数を使用する。
以上がGo の条件文で変数のスコープを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。