[ IF И ELSE ]
В Go скобки вокруг условия не нужны — это сделано для краткости. Однако фигурные скобки вокруг тела обязательны, даже если в нём одна строка.
hp := 30
if hp <= 0 {
fmt.Println("Игра окончена!")
} else if hp < 50 {
fmt.Println("Мало здоровья!")
} else {
fmt.Println("Всё в порядке")
}
В Go нет конструкции
a ? b : c. Всегда используй if-else — это сделано намеренно для читаемости и предсказуемости кода.
[ IF С ИНИЦИАЛИЗАТОРОМ ]
Уникальная особенность Go — возможность объявить переменную прямо в заголовке if. Такая переменная видна только внутри этого блока if-else и нигде больше.
if score := calculateScore(); score > 1000 {
fmt.Println("Рекорд!", score)
} else {
fmt.Println("Очки:", score)
}
// score здесь уже не существует — она за пределами видимости
[ SWITCH-CASE ]
В Go switch не требует break — каждый case автоматически заканчивается после выполнения. Ключевое слово fallthrough явно продолжает выполнение в следующий case.
level := 3
switch level {
case 1:
fmt.Println("Лёгкий уровень")
case 2, 3:
fmt.Println("Средний уровень") // срабатывает на 2 или 3
case 4:
fmt.Println("Сложный уровень")
default:
fmt.Println("Неизвестный уровень")
}
[ SWITCH БЕЗ ВЫРАЖЕНИЯ ]
switch можно использовать без выражения — тогда каждый case содержит произвольное условие. Это читается как цепочка if-else, но аккуратнее.
x := 42
switch {
case x < 0:
fmt.Println("Отрицательное")
case x == 0:
fmt.Println("Ноль")
case x > 0 && x < 100:
fmt.Println("Положительное до 100")
default:
fmt.Println("100 и больше")
}
Это один из самых чистых способов писать условия в Go. Опытные Go-разработчики предпочитают его длинным цепочкам
if-else if.
[ ПОПРОБУЙ САМ ]
Напиши switch, который получает номер урока и выводит его название:
— 1 → "Основы"
— 2 → "Переменные"
— 3 → "Операторы"
— 4 → "Условия"
— иначе → "Неизвестный урок"
[ ПОКАЗАТЬ РЕШЕНИЕ ]
package main
import "fmt"
func main() {
lesson := 3
switch lesson {
case 1:
fmt.Println("Основы")
case 2:
fmt.Println("Переменные")
case 3:
fmt.Println("Операторы")
case 4:
fmt.Println("Условия")
default:
fmt.Println("Неизвестный урок")
}
}