Вы не можете. Хотя локальная переменная 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
Ах, извините, я забыл удалить переменную уровня пакета, поэтому он не может скомпилировать. Я просто хочу убедиться, что Голанг может это сделать. –