Go: объявить новую переменную и перезаписать переменную из более высокой области, как?
Я не могу найти ответ нигде, поэтому вот такая ситуация:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar, err := doSomethingWithString()
if err != nil {
// error handling
}
}
второй globalVar
объявление дает ошибку как тогда :=
и когда '=' используется:
- С
:=
Он говорит:globalVar declared and not used
потому что теперь globalVar является новой переменной во внутренней области. - С
=
он говорит:undefined err
потому что он еще не объявлен.
таким образом, в основном, должен быть способ определить разницу между =
и :=
для каждой переменной в левой части декларации.
Я вижу два возможных решения, которые, на мой взгляд, одинаково уродливы:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar2, err := doSomethingWithString()
if err != nil {
// error handling
}
globalVar = globalVar2
}
или
globalVar := "string"
var err error
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
Я должен использовать один из этих обходных путей или есть правильный способ достижения того, что мне нужно?
второе решение кажется наименее уродливым, но если есть много переменных, которые вам нужны только в if-scope, эти переменные не будут удалены после объем и упорствует весь внешний объем. Поэтому решение fist кажется лучшим, на мой взгляд.
но я хотел бы услышать, как другие решают эту ситуацию...
1 ответов
просто не используйте := в этом случае и predeclare как globalVar, так и err.
var (
globalVar string
err error
)
globalVar = "string"
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
или, альтернативно, если вы хотите ограничить область подстраховаться:
globalVar := "string"
if globalVar == "string" {
var err error
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
http://play.golang.org/p/73bF_tHYsC пример похож на предыдущий ответ.
:= означает удобство, когда вы хотите объявить и назначить в одном операторе. Если это мешает, просто не используйте его.