Я не могу найти ответ нигде, так что это ситуация:
// 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 существует много переменных, то эти переменные не будут удалены после области видимости и будут сохраняться во всей внешней области. Поэтому первое решение кажется лучшим на мой взгляд.
Но я хотел бы услышать, как другие решают эту ситуацию...