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