if и else
Чему вы научитесь:
- выбирать, какой код выполнить, с помощью
if,else ifиelse; - объявлять переменную прямо в
ifи понимать, где она видна; - заменять длинную цепочку
else ifинструкциейswitch; - объяснять, чем
switchв Go отличается отswitchв C.

Представьте развилку дороги с указателем: «Если идёт дождь — налево, к остановке, иначе — направо, через парк». Вы читаете условие и выбираете одну дорогу, а по второй в этот раз не идёте. Программе тоже нужны такие развилки: напечатать одно или другое, посчитать так или иначе.
Инструкции в main выполняются по порядку, сверху вниз. Инструкция if выполняет блок в фигурных скобках, только если условие после if истинно. Блок после else выполняется, когда условие ложно:
package main
import "fmt"
func main() {
t := 25
if t < 0 {
fmt.Println("frost")
} else if t < 20 {
fmt.Println("cool")
} else {
fmt.Println("warm") // warm
}
}Давайте пройдём по программе:
t := 25— переменнаяtравна25.if t < 0— условие ложно, поэтому программа пропускает первую ветку.else if t < 20— это условие тоже ложно.else— остаётся последняя ветка, и программа печатаетwarm.
Три вида веток
Каждый блок в фигурных скобках называют веткой. В примере их три, и у каждой своя роль.
if
Ветка if открывает развилку. Её заголовок состоит из трёх частей:
- ключевое слово
if; - условие, например
t < 0; - блок в фигурных скобках, который выполняется, когда условие истинно.
Если условие ложно, программа пропускает блок и идёт дальше. if может стоять и один, без else: тогда при ложном условии не выполняется ничего.
else if
Ветка else if добавляет к развилке ещё одно условие. Она проверяется, только если все условия выше оказались ложны.
Цепочка else if проверяет условия сверху вниз и выполняет первую ветку, чьё условие истинно, а остальные пропускает. Поэтому порядок веток важен. Вторая ветка проверяется только при t >= 0, когда первое условие уже ложно, и приписка t >= 0 && в её условии не нужна.
Здесь развилка отличается от настоящей дороги: путник может выбрать самый подходящий указатель, а Go читает их строго сверху вниз и идёт по первому подходящему.
else
У ветки else нет условия. Она срабатывает, когда ложны все условия выше, и всегда стоит последней. Без неё в этом случае не выполнится ничего.
Фигурные скобки
Круглые скобки вокруг условия не нужны, хотя не мешают сборке. Фигурные скобки вокруг ветки обязательны, даже если в ней одна инструкция. Запись без них не компилируется:
x := 5
if x > 0 fmt.Println("positive") // ✗syntax error: unexpected name fmt, expected {Компилятор ждал { сразу после условия, а встретил имя fmt.
Ветки можно вкладывать друг в друга: внутри блока if стоит ещё один if со своими скобками. Скобки обязательны, поэтому сразу видно, к какому if относится каждый else.
Условие типа bool
Условие должно иметь тип bool. Подходят:
- сравнения вроде
x > 0; - их сочетания через
&&,||и!; - переменная типа
bool.
Go не превращает число в true или false, поэтому проверку на ноль пишут явно: x != 0. На if x { при x типа int компилятор отвечает ошибкой non-boolean condition in if statement.
Частая ошибка
else перенесли на новую строку после закрывающей скобки:
x := 5
if x > 0 {
fmt.Println("positive")
}
else { // ✗
fmt.Println("not positive")
}syntax error: unexpected keyword else, expected }Компилятор сам ставит точку с запятой в конце строки, которая заканчивается на }. Поэтому инструкция if завершается на этой скобке, и else на следующей строке оказывается сам по себе. Пишите } else { на одной строке. else if тоже ставьте на строку с закрывающей скобкой предыдущей ветки.
Главное
ifвыполняет ветку, когда условие истинно, аelse— когда ложны все условия.- Цепочка
else ifвыполняет первую ветку с истинным условием и пропускает остальные. - Условие имеет тип
bool: число вместо условия не компилируется. - Фигурные скобки вокруг ветки обязательны, а
} else {пишут на одной строке.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.