2016-07-21 4 views
1
package main 

import "fmt" 

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

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

関数レベルの変数ではなく定数を参照する方法はありますか?関数レベル変数の代わりに定数またはパッケージレベルの変数を参照してください

+1

これはコンパイルされません。私は尋ねなければならない、なぜあなたはこれをしたいのですか? – squiguy

+0

ああ、申し訳ありません、私はパッケージレベルの変数を削除するのを忘れてしまったので、コンパイルできません。私はGolangがそれを行うことができることを確かめたいだけです。 –

答えて

6

できません。ローカル変数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 
関連する問題