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.
どちらのメソッドも同じ出力を返します:
Jobs Yosua
これは、ローカル変数を使用しながらトップレベル変数にアクセスできることを示しています。これらの回避策のいずれかを使用して、同じ名前を付けます。ただし、ローカル変数はそのスコープ内でトップレベルの識別子よりも優先されることに留意することが重要です。
以上が同じ名前のローカル変数が Go に存在する場合、パッケージレベルの定数または変数にアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。