x := 1; if true { x := 2; _ = x }; fmt.Println(x)?Выведет 1. Оператор := внутри блока if создаёт новую переменную x, которая затеняет (shadow) внешнюю. Внешняя x остаётся равной 1 и не меняется.
x := 1
if true {
x := 2 // новая x только внутри блока
_ = x
}
fmt.Println(x) // 1
При обработке ошибок часто пишут if err := do(); err != nil - это правильно. Но если нужно переиспользовать уже объявленную err, используют =: err = do(), иначе создаётся затеняющая переменная.