2016-07-21 2 views
1
package main 

import "fmt" 

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

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

Как ссылаться на константу, а не на переменную уровня функции?Обратитесь к переменной константы или уровня пакета вместо переменной уровня функции

+1

Это не будет компилироваться. Я должен спросить, почему вы хотите это сделать? – squiguy

+0

Ах, извините, я забыл удалить переменную уровня пакета, поэтому он не может скомпилировать. Я просто хочу убедиться, что Голанг может это сделать. –

ответ

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 
Смежные вопросы