Основные конструкции управления в Go
В этом уроке мы изучим, как управлять потоком выполнения программы в Go. Вы узнаете о мощных инструментах, которые помогут вам создавать сложную логику и эффективные алгоритмы.
Почему управляющие конструкции важны?
Управляющие конструкции — это основа любого алгоритма. В Go они:
- Позволяют принимать решения
- Управляют повторением действий
- Делают код более гибким и мощным
- Помогают обрабатывать различные сценарии
💡 Интересный факт: В Go нет цикла
while, но его можно эмулировать с помощьюfor. Это сделано для упрощения языка и уменьшения количества ключевых слов.
Условные операторы
1. Оператор if
package main
import "fmt"
func main() {
age := 20
if age >= 18 {
fmt.Println("Вы совершеннолетний.")
} else {
fmt.Println("Вы несовершеннолетний.")
}
}
⚡ Важно: В Go условие в
ifдолжно быть булевым выражением. Нельзя использовать числа или другие типы напрямую.
2. Расширенный if с else if
func checkAge(age int) {
if age < 13 {
fmt.Println("Вы ребёнок.")
} else if age >= 13 && age < 18 {
fmt.Println("Вы подросток.")
} else if age >= 18 && age < 60 {
fmt.Println("Вы взрослый.")
} else {
fmt.Println("Вы пожилой человек.")
}
}
3. Инициализация в условии
if age := getUserAge(); age >= 18 {
fmt.Printf("Возраст: %d, доступ разрешён\n", age)
} else {
fmt.Printf("Возраст: %d, доступ запрещён\n", age)
}
Оператор switch
1. Базовый switch
func getDayName(day int) string {
switch day {
case 1:
return "Понедельник"
case 2:
return "Вторник"
case 3:
return "Среда"
case 4:
return "Четверг"
case 5:
return "Пятница"
case 6:
return "Суббота"
case 7:
return "Воскресенье"
default:
return "Неизвестный день"
}
}
2. switch без выражения
func checkTime(hour int) {
switch {
case hour >= 5 && hour < 12:
fmt.Println("Утро")
case hour >= 12 && hour < 17:
fmt.Println("День")
case hour >= 17 && hour < 22:
fmt.Println("Вечер")
default:
fmt.Println("Ночь")
}
}
3. Множественные значения в case
func isWeekend(day int) bool {
switch day {
case 6, 7:
return true
default:
return false
}
}
Циклы
1. Классический цикл for
// Вывод чисел от 1 до 10
for i := 1; i <= 10; i++ {
fmt.Println(i)
}
2. Цикл с условием (аналог while)
// Вывод чисел, пока они меньше 10
i := 1
for i < 10 {
fmt.Println(i)
i++
}
3. Бесконечный цикл
// Бесконечный цикл с выходом по условию
for {
if someCondition() {
break
}
// Действия
}
4. range для итерации
// Итерация по массиву
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Индекс: %d, Значение: %d\n", index, value)
}
// Итерация по карте
ages := map[string]int{
"Иван": 25,
"Пётр": 30,
}
for name, age := range ages {
fmt.Printf("%s: %d лет\n", name, age)
}
Управление циклом
1. break и continue
// Пример с break
for i := 1; i <= 10; i++ {
if i == 5 {
break // Выход из цикла
}
fmt.Println(i)
}
// Пример с continue
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue // Пропуск чётных чисел
}
fmt.Println(i)
}
2. Метки для вложенных циклов
outerLoop:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
if i*j == 6 {
break outerLoop // Выход из обоих циклов
}
fmt.Printf("%d * %d = %d\n", i, j, i*j)
}
}
Практические задания
Задание 1: Калькулятор с меню
Создайте программу-калькулятор, которая:
- Выводит меню с операциями (+, -, *, /)
- Запрашивает два числа
- Выполняет выбранную операцию
- Позволяет продолжить или выйти
Задание 2: Игра "Угадай число"
Напишите игру, где:
- Компьютер загадывает число от 1 до 100
- Игрок пытается угадать число
- Программа подсказывает "больше" или "меньше"
- Считает количество попыток
Задание 3: Анализатор текста
Создайте программу, которая:
- Принимает текст от пользователя
- Подсчитывает количество:
- Слов
- Букв
- Цифр
- Специальных символов
- Выводит статистику
Что дальше?
В следующем уроке мы:
- Изучим функции в Go
- Познакомимся с методами
- Узнаем о замыканиях
- Начнём писать более сложные программы
🎯 Цель урока: К концу этого урока вы должны уметь:
- Использовать все управляющие конструкции Go
- Писать эффективные циклы
- Применять условные операторы
- Управлять потоком выполнения программы