Условия (if/else/switch) в Go 1.21: подробное руководство
Условия в программировании на Go (if/else/switch)
Что такое условия и зачем они нужны?
Представь, что ты — капитан космического корабля. Твоему кораблю нужно принимать решения: "Если впереди астероид — облететь. Если топливо заканчивается — лететь на ближайшую заправку."
В программировании условия позволяют программе принимать решения. Программа смотрит на данные и выбирает, что делать дальше. Без условий программа просто выполняла бы команды одну за другой, не реагируя на ситуацию.
В языке Go есть два основных способа проверять условия: if/else и switch.
Основной синтаксис if/else
Конструкция if проверяет условие. Если оно истинно (правда) — выполняется один блок кода, если ложно — другой.
if условие {
// код, если условие правда
} else {
// код, если условие ложь
}
Пример — программа "Что больше":
package main
import "fmt"
func main() {
var a, b int
fmt.Print("Введите первое число: ")
fmt.Scan(&a)
fmt.Print("Введите второе число: ")
fmt.Scan(&b)
if a > b {
fmt.Println(a, "больше, чем", b)
} else if b > a {
fmt.Println(b, "больше, чем", a)
} else {
fmt.Println("Числа равны")
}
}
Как это работает? Программа просит ввести два числа. Затем проверяет: если первое больше второго — выводит одно сообщение, если второе больше первого — другое, иначе (если равны) — третье.
Проверка нескольких условий: else if
Когда нужно проверить больше двух вариантов, используют else if. Пример — программа "Парк аттракционов":
package main
import "fmt"
func main() {
var age int
fmt.Print("Сколько вам лет? ")
fmt.Scan(&age)
if age < 5 {
fmt.Println("Идите в зону для малышей (0-4 года)")
} else if age < 12 {
fmt.Println("Идите в детскую зону (5-11 лет)")
} else if age < 18 {
fmt.Println("Идите в подростковую зону (12-17 лет)")
} else {
fmt.Println("Идите во взрослую зону (18+)")
}
}
Обрати внимание: мы проверяем age < 5, потом age < 12. Если возраст 7, то первое условие ложно (7 не меньше 5), а второе истинно (7 меньше 12). Go проверяет условия по порядку и останавливается на первом истинном.
Логические операторы: && (И), || (ИЛИ), ! (НЕ)
Иногда нужно проверить сразу несколько условий:
&&— "И". Оба условия должны быть правдой.||— "ИЛИ". Хотя бы одно условие должно быть правдой.!— "НЕ". Переворачивает условие.
Пример — программа "Магазин сладостей":
package main
import "fmt"
func main() {
var summa int
fmt.Print("Введите сумму покупки: ")
fmt.Scan(&summa)
if summa > 1000 {
fmt.Println("Скидка 20%! Ваша цена:", summa*80/100)
} else if summa > 500 && summa <= 1000 {
fmt.Println("Скидка 10%! Ваша цена:", summa*90/100)
} else {
fmt.Println("Скидки нет. Цена:", summa)
}
}
Здесь summa > 500 && summa <= 1000 означает: "сумма больше 500 И меньше или равна 1000".
Конструкция switch — удобная замена длинных if/else
Когда нужно проверить одну переменную на много разных значений, switch делает код чище и понятнее.
switch переменная {
case значение1:
// код
case значение2:
// код
default:
// код, если ни одно не подошло
}
Пример — программа "Путешествие в горы":
package main
import "fmt"
func main() {
var height int
fmt.Print("Введите высоту участка (метры): ")
fmt.Scan(&height)
var slozhnost string
switch {
case height < 500:
slozhnost = "лёгкий"
case height < 1500:
slozhnost = "средний"
case height < 3000:
slozhnost = "сложный"
default:
slozhnost = "экстремальный"
}
fmt.Println("Уровень сложности:", slozhnost)
}
В Go можно использовать switch без переменной — тогда в case пишутся условия, как в примере выше. Это удобно, когда условия сложные.
Проверка чётности числа
Оператор % (остаток от деления) помогает определить чётность. Если число делится на 2 без остатка — оно чётное.
package main
import "fmt"
func main() {
var chislo int
fmt.Print("Введите число: ")
fmt.Scan(&chislo)
if chislo%2 == 0 {
fmt.Println(chislo, "— чётное число")
} else {
fmt.Println(chislo, "— нечётное число")
}
}
Частые ошибки новичков
- Забывают фигурные скобки. В Go скобки обязательны даже для одной строки. Нельзя писать
if x > 5 fmt.Println("ok")— это ошибка. - Путают = и ==. Один знак = это присваивание, два == это сравнение.
if x = 5— ошибка компиляции. - Лишняя точка с запятой после условия.
if x > 5; { ... }— так нельзя. - Забывают про else. Если нужно обработать оба варианта, else обязателен. Иначе программа просто ничего не сделает, когда условие ложно.
- Сложные вложенные if. Старайся не писать if внутри if внутри if. Используй else if или switch.
Итоговый пример: решение задачи "Магазин сладостей"
Давай решим задачу целиком. Условие: если сумма покупки строго больше 1000 рублей — скидка 20%, если от 500 до 1000 (включительно) — скидка 10%, иначе скидки нет.
package main
import "fmt"
func main() {
var summa int
fmt.Print("Введите сумму покупки: ")
fmt.Scan(&summa)
var skidka int
var itogovayaSumma int
if summa > 1000 {
skidka = 20
} else if summa >= 500 {
skidka = 10
} else {
skidka = 0
}
itogovayaSumma = summa * (100 - skidka) / 100
fmt.Println("Скидка:", skidka, "%")
fmt.Println("Итоговая сумма:", itogovayaSumma, "рублей")
}
Разбор решения:
1. Просим пользователя ввести сумму.
2. Проверяем условия по порядку: сначала >1000, потом >=500, потом всё остальное.
3. Вычисляем итоговую сумму с учётом скидки.
4. Выводим результат.
Попробуй запустить программу с разными числами: 300 (скидки нет), 750 (скидка 10%), 1500 (скидка 20%).
Условия — это основа любого осмысленного кода. Тренируйся, и скоро ты сможешь писать программы, которые реагируют на любые ситуации!