Основные конструкции управления в 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: Калькулятор с меню

Создайте программу-калькулятор, которая:

  1. Выводит меню с операциями (+, -, *, /)
  2. Запрашивает два числа
  3. Выполняет выбранную операцию
  4. Позволяет продолжить или выйти

Задание 2: Игра "Угадай число"

Напишите игру, где:

  1. Компьютер загадывает число от 1 до 100
  2. Игрок пытается угадать число
  3. Программа подсказывает "больше" или "меньше"
  4. Считает количество попыток

Задание 3: Анализатор текста

Создайте программу, которая:

  1. Принимает текст от пользователя
  2. Подсчитывает количество:
    • Слов
    • Букв
    • Цифр
    • Специальных символов
  3. Выводит статистику

Что дальше?

В следующем уроке мы:

  • Изучим функции в Go
  • Познакомимся с методами
  • Узнаем о замыканиях
  • Начнём писать более сложные программы

🎯 Цель урока: К концу этого урока вы должны уметь:

  • Использовать все управляющие конструкции Go
  • Писать эффективные циклы
  • Применять условные операторы
  • Управлять потоком выполнения программы