На этом шаге рассмотрим использование инструкции ветвления в Go.
Инструкция if в языке Go имеет следующий синтаксис:
if необязательнаяИнструкция1; логическоеВыражение1 { блок1 } else if необязательнаяИнструкция2;логическоеВыражение2 { блок2 } else { блок3 }
Инструкция может иметь нуль или более разделов else if и нуль или один завершающий раздел else. Каждый блок содержит нуль или более инструкций.
Фигурные скобки являются обязательными, а точки с запятой требуются, только когда присутствует необязательная инструкция.
Необязательная инструкция должна быть простой инструкцией в терминологии Go: это может быть единственное выражение, инструкция передачи данных в канал (с использованием оператора ←), инструкция инкремента или декремента, инструкция присваивания или инструкция сокращенного объявления переменной. Если в необязательной инструкции объявляются переменные (например, с помощью оператора :=), их область видимости простирается от точки объявления до конца всей инструкции if, то есть они существуют в блоках if или else if, если те существуют, а также во всех нижележащих разделах и прекращают свое существование в конце инструкции if.
Логическое выражение должно возвращать значение типа bool. В языке Go нелогические значения не преобразуются автоматически в логические, поэтому всегда следует использовать оператор сравнения, например if i == 0.
Рассмотрим пример, который демонстрирует применение необязательной инструкции.
// Канонический вид if x := vvod(); x < 0 { fmt.Printf("(%d)\n", - x) } else { fmt.Println(x) } // Подробный! { x := vvod() if x < 0 { fmt.Printf("(%d)\n", - x) } else { fmt.Println(x) } }
Эти два фрагмента выведут одно и то же. Чтобы ограничить область видимости переменной x, во втором фрагменте пришлось использовать дополнительную пару фигурных скобок, тогда как в левом фрагменте эта область ограничивается инструкцией if автоматически.
На следующем шаге рассмотрим инструкцию switch в Go.