Область видимости в Go
Сейчас мы посмотрим, где видно имя, объявленное внутри ветки. Короткое объявление в фигурных скобках создает переменную только для этого блока. После закрывающей скобки обратиться нельзя.
Пусть проверка всегда истинна. Внутри ветки число можно напечатать. Строка после скобки закомментирована: снаружи этого имени нет, и с такой строкой программа бы не собралась:
if true {
inner := 5
fmt.Println(inner) // сработает это
}
// fmt.Println(inner)
То же относится к имени из короткой команды перед проверкой. Оно живет только внутри всей конструкции с этой проверкой, включая обе ветки. Снаружи компилятор такое имя не найдет:
if step := 2; step > 0 {
fmt.Println(step) // сработает это
}
// fmt.Println(step)
Если объявить переменную снаружи условия, она видна и внутри ветки, и после закрывающей скобки этой проверки:
outer := 1
if true {
fmt.Println(outer) // сработает это
}
fmt.Println(outer) // сработает это
Скажите, соберется ли программа, если объявить tmp
внутри ветки и вывести tmp после закрывающей скобки.
Дана переменная:
outer := 1
Внутри ветки с истинной проверкой выведите outer.
Скажите, почему это допустимо.
Скажите, где видно имя из короткой записи с точкой с запятой перед проверкой и где этого имени уже нет.
Автор кода хотел проверить, достиг ли возраст 18 лет.
Программа не собирается. Исправьте ошибку объявления:
age := 17
if age >= 18 {
adult := true
} else {
adult := false
}
fmt.Println(adult)