同じ名前のローカル変数が Go に存在する場合、パッケージレベルの定数または変数にアクセスする方法は?

Mary-Kate Olsen
リリース: 2024-11-16 11:21:03
オリジナル
835 人が閲覧しました

How to Access Package-Level Constants or Variables When a Local Variable with the Same Name Exists in Go?

関数レベルの変数よりも定数またはパッケージ レベルの変数を参照する

Go では、変数のスコープによって、コードのさまざまなブロック内での変数のアクセス可能性が決まります。ローカル変数とトップレベルの定数またはパッケージレベルの変数が同じ名前を共有する場合、共通の問題が発生します: ローカル変数の代わりに定数またはパッケージレベルの変数を参照するにはどうすればよいですか?

問題

次の Go プログラムを考えてみましょう:

package main

import "fmt"

const name = "Yosua"
// or var name string = "James"

func main() {
    name := "Jobs"
    fmt.Println(name)
}
ログイン後にコピー

このプログラムはパッケージ レベルで定数名を宣言しますが、main 関数内では別の変数を宣言します。名前付きの名前は関数レベルで宣言されます。プログラムを実行すると、ローカル関数レベルの変数名の値である「Jobs」が出力されます。代わりにパッケージ レベルの定数名にアクセスするにはどうすればよいですか?

直接参照はありません

残念ながら、Go にはブロックのスコープ内のトップレベルの識別子を直接参照する方法がありません。同名のローカル変数が存在します。 Go の宣言とスコープの仕様によれば、ローカルで宣言された識別子はそのスコープ内で優先されます。

回避策

トップレベル変数とローカル変数の両方にアクセスするには、次のように使用できます。別の名前を使用するか、次のいずれかの回避策を使用してください:

最上位の値の保存まず

cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)
ログイン後にコピー

このメソッドは、ローカル変数を作成する前に最上位の定数または変数の値を保存します。

関数を使用して最上位の値にアクセスする

func getName() string {
    return name
}

name := "Jobs"
fmt.Println(name)
fmt.Println(getName())
ログイン後にコピー

このアプローチは、最上位変数を返す関数を定義することで、最上位変数にアクセスする代替方法を提供します。 value.

Output

どちらのメソッドも同じ出力を返します:

Jobs
Yosua
ログイン後にコピー

これは、ローカル変数を使用しながらトップレベル変数にアクセスできることを示しています。これらの回避策のいずれかを使用して、同じ名前を付けます。ただし、ローカル変数はそのスコープ内でトップレベルの識別子よりも優先されることに留意することが重要です。

以上が同じ名前のローカル変数が Go に存在する場合、パッケージレベルの定数または変数にアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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