Выбор ответа Middle Типы и нулевые значения спрашивают часто обновлено
Затенение переменной через :=
Вопрос
Что выведет код?
var err error
if true {
n, err := strconv.Atoi("x")
_ = n
_ = err
}
fmt.Println(err)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: <nil. Внутри блока if оператор := создаёт новые переменные n и err, которые затеняют внешнюю err.
Варианты ответа
<nil>правильный ответstrconv.Atoi: parsing "x": invalid syntax- Ошибка компиляции: err объявлена дважды
0
Разбор
Внутри блока if оператор := создаёт новые переменные n и err, которые затеняют внешнюю err. Ошибка разбора попадает во внутреннюю переменную, а печатается внешняя, которая так и осталась nil. Компилятор не жалуется: это разные области видимости (линтеры вроде govet shadow ловят такое). Исправление: n, err = strconv.Atoi("x") с заранее объявленной n.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Типы и нулевые значения»
- Перевод числа между системами счисления на Go
- Права доступа битовой маской на Go
- Наименьший целый тип для суммы на Go
- Что выведет Go: преобразования чисел
- Что выведет Go: iota с выражением
- Что выведет Go: затенение переменной в if
- type A = B и type A B
- byte и rune