できません。ローカル変数name
がスコープ内にある間、名前name
はローカル変数を示します。トップレベルの識別子を参照する「修飾子」はありません。
Spec: Declarations and scope:
ブロックで宣言された識別子が内部ブロックで再宣言されてもよいです。内部宣言の識別子はスコープ内にありますが、内部宣言によって宣言されたエンティティを示します。
トップレベルの定数/変数とローカル変数の両方に同時にアクセスする必要がある場合は、別の名前を使用してください。
あなたができないか、あなたはトップレベルの定数または最初の変数の値を保存することにしたくない何らかの理由の場合:
cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)
それとも、あなたがそれにアクセスするための他の手段を提供することができます、例えば機能:どちらの場合も
func getName() string {
return name
}
name := "Jobs"
fmt.Println(name)
fmt.Println(getName())
出力(Go Playgroundにそれらを試してみてください):
Jobs
Yosua
これはコンパイルされません。私は尋ねなければならない、なぜあなたはこれをしたいのですか? – squiguy
ああ、申し訳ありません、私はパッケージレベルの変数を削除するのを忘れてしまったので、コンパイルできません。私はGolangがそれを行うことができることを確かめたいだけです。 –