ホームページ >バックエンド開発 >Golang >Go でローカル変数によってシャドウされている場合に定数とパッケージ レベルの変数にアクセスする方法

Go でローカル変数によってシャドウされている場合に定数とパッケージ レベルの変数にアクセスする方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 22:33:02751ブラウズ

How to Access Constants and Package-Level Variables When Shadowed by Local Variables in Go?

関数内の定数とパッケージレベル変数の参照

提供された Go コードの main 関数内で、定数をシャドウするローカル変数名が定義されています。または同じ名前のパッケージレベルの変数。これは、混乱や誤った動作につながる可能性があります。

シャドウイングについて

Go では、新しい変数が関数内で宣言されると、関数内で定義された同じ名前を持つ他の変数よりも優先されます。より高いレベル (たとえば、パッケージレベルのスコープ内)。これは変数シャドウイングとして知られています。

解決策

main 関数内で定数またはパッケージ レベルの変数名を参照する場合、関数を表す識別子名を直接使用することはできません。 -レベル変数。代わりに、次のいずれかのアプローチを使用できます:

  • 定数または変数の値の保存: 定数またはパッケージ レベルの変数の値をローカル ファイルに一時的に保存できます。別の名前の変数。例:
const name = "Yosua"

func main() {
    localName := name
    name := "Jobs"
    fmt.Println(name) // Jobs
    fmt.Println(localName) // Yosua
}
  • ゲッター関数の提供: 定数またはパッケージ レベルの変数の値を返す関数を作成できます。例:
const name = "Yosua"

func getName() string {
    return name
}

func main() {
    name := "Jobs"
    fmt.Println(name) // Jobs
    fmt.Println(getName()) // Yosua
}

パッケージ レベルの変数が const の代わりに var を使用して宣言されている場合、関数内でシャドウして再代入できます。このような場合、上記のいずれかの方法を使用すると、元の値が確実に保持されます。

以上がGo でローカル変数によってシャドウされている場合に定数とパッケージ レベルの変数にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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