ホームページ > バックエンド開発 > Golang > Go の条件文で変数のスコープを適切に処理するにはどうすればよいですか?

Go の条件文で変数のスコープを適切に処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-28 18:56:11
オリジナル
494 人が閲覧しました

How to Properly Handle Variable Scope in Go's Conditional Statements?

Go の変数スコープの制限: If ステートメント内の変数の問題に対処する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート