Go では、ローカル (関数スコープ) とトップレベルの異なるスコープで変数を宣言できます。 (パッケージまたはファイルのスコープ)。場合によっては、同じ名前のローカル変数が存在する、関数スコープ内のトップレベルの定数または変数を参照したい状況に遭遇することがあります。
次のコード スニペットを検討してください。
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
質問: ローカル変数の代わりに定数名を参照するにはどうすればよいですか?
回答:
存在する範囲のスコープ変数にアクセスする同じ名前のローカル変数を使用することはできません。ローカル変数がスコープ内にある間は、関数内の外部変数をシャドウしてアクセスできなくなります。
Go 言語仕様では次のように規定されています。
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
代替案:
トップレベル変数とローカル変数の両方に同時にアクセスする必要がある場合は、別個の名前を使用することを検討してください。ただし、それが不可能な場合は、次の代替手段に頼ることができます:
新しい変数に一時的に代入:
例:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
トップレベル変数を間接的に公開します:
例:
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
以上が同じ名前のローカル変数が存在する場合、Go でトップレベルの定数または変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。