ホームページ >バックエンド開発 >Golang >Go では変数スコープとシャドウイングはどのように機能しますか?

Go では変数スコープとシャドウイングはどのように機能しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-10 21:49:11634ブラウズ

How Does Variable Scope and Shadowing Work in Go?

Go の変数スコープとシャドウイング: 総合ガイド

Go では、クリーンで保守可能なコードを書くために変数スコープとシャドウイングを理解することが重要です。変数スコープはプログラム内の変数の可視性を定義しますが、シャドウイングはネストされたスコープ内で同じ名前の変数を再宣言することを指します。

Go の変数スコープ

Go は字句スコープを使用します。これは、変数のスコープがコード内の位置によって決定されることを意味します。 5 つの異なるスコープ レベルがあります:

  • ユニバース ブロック: 事前に宣言された識別子 (true、false など)
  • パッケージ ブロック: 最上位で宣言された識別子
  • ファイル ブロック: パッケージ名
  • 関数本体: メソッドレシーバー、関数パラメータ、結果変数
  • ブロック スコープ: ブロック内で宣言された定数、変数、型

Go での変数シャドウイング

シャドウイングは変数が指定されたときに発生します内部スコープの変数は、外部スコープの変数と同じ名前で宣言されます。このような場合、内側のスコープの変数が優先され、外側の変数がシャドウされます。

変数のスコープとシャドウイングの利点

  • データの整合性: 外側のスコープのデータは、内側の変数によって誤ってアクセスされたり変更されたりすることはありませんスコープ。
  • 制限されたスコープ: 変数のスコープを特定のコード ブロックに設定できるため、プログラムの他の部分からの副作用のリスクが軽減されます。

変数シャドウイングのさまざまな形式

Go では、変数シャドウイングは次のように行うことができます。いくつかの方法で実現できます:

  • ステートメント内での短縮代入の使用:

    for i := 'a'; i < 'b'; i++ {
      // i shadowed inside this block
    }
  • の使用{...}ペア:

    {
      i := "hi" //new local var
    }
  • 関数呼び出しの使用:

    func fun(i int) {
      i++ //use as local var without side effect
    }
  • シャドウイング グローバル変数:

    var i int = 1 //global
    func main() {
      i := 10 //Shadowing global var
    }

コード サンプルと例

変数のスコープ:

package main

func main() {
    i := 10 //scope: main
    fmt.Println(i) //output: 10
}

この例では、i は main 関数内で宣言されており、その関数内でのみアクセスできます。

変数シャドウイング:

package main

func shadow() {
    x := 10 //shadowing global variable x
    fmt.Println(x) //output: 10
}

var x int = 1 //global variable

func main() {
    fmt.Println(x) //output: 1
    shadow()
}

この例では、グローバル変数 x はシャドウ関数のローカル変数 x によってシャドウされます。 。したがって、シャドウ関数内で x にアクセスすると、値 10 のローカル変数が参照されます。

以上がGo では変数スコープとシャドウイングはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。