Go Academy · Урок

Операторы switch в Go

switch с меткой и без метки, fallthrough

Урок 3 из 412 шагов

«Операторы switch в Go» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Основы switch

switch в Go мощнее, чем в C: по умолчанию переход к следующей ветви не выполняется, а ветви могут содержать несколько значений:

day := "Monday"
switch day {
case "Saturday", "Sunday":
    fmt.Println("Weekend")
default:
    fmt.Println("Weekday")
}

Без неявного перехода к следующей ветви

В Go выполнение каждой ветви case завершается автоматически, в отличие от C, где необходимо явно писать break:

  • Код становится чище, а ошибок — меньше
  • Используйте fallthrough явно, когда нужно поведение как в C; это требуется редко

switch с оператором инициализации

Как и if, switch принимает необязательный оператор инициализации:

switch os := runtime.GOOS; os {
case "linux":
    fmt.Println("Linux")
case "darwin":
    fmt.Println("macOS")
default:
    fmt.Printf("Other: %s\n", os)
}

switch без выражения (альтернатива цепочке if-else)

В switch без выражения после ключевого слова нет выражения — каждая ветвь case вычисляет логическое условие:

score := 75
switch {
case score >= 90:
    fmt.Println("A")
case score >= 80:
    fmt.Println("B")
case score >= 70:
    fmt.Println("C")
default:
    fmt.Println("F")
}

Переключатель типов

Переключатель типов проверяет динамический тип значения интерфейса:

func describe(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("int: %d\n", v)
    case string:
        fmt.Printf("string: %s\n", v)
    default:
        fmt.Printf("unknown: %T\n", v)
    }
}

fallthrough

Используйте fallthrough, чтобы явно выполнить тело следующей ветви независимо от её условия. Обычно это не требуется:

n := 1
switch n {
case 1:
    fmt.Println("one")
    fallthrough
case 2:
    fmt.Println("one or two")
}

Несколько значений в одной ветви

Перечислите несколько значений через запятую в одной ветви case:

func isVowel(c byte) bool {
    switch c {
    case 'a', 'e', 'i', 'o', 'u':
        return true
    }
    return false
}

switch и if-else

Используйте switch, когда:

  • Сравниваете одно выражение с множеством значений
  • Используете переключатель типов для диспетчеризации интерфейса
  • Читаемость улучшается по сравнению с цепочкой if-else

Используйте if-else, когда условия являются разными логическими выражениями.

break в switch

Чтобы досрочно выйти из switch, используйте break. Чтобы выйти из внешнего цикла изнутри switch, используйте именованный break:

loop:
for {
    switch input() {
    case "quit":
        break loop  // exits the for loop
    }
}

Ветка default

Ветка default выполняется, когда ни одна другая ветвь не подходит. Рекомендации:

  • Всегда включайте default при обработке перечислений, чтобы обнаруживать неожиданные значения
  • Размещайте её внизу для удобства чтения
  • В переключателях типов используйте default, чтобы корректно обрабатывать неподдерживаемые типы

Быстрая проверка

Что происходит в Go, когда ветвь switch подходит: выполняется ли переход к следующей ветви?

Итоги: switch в Go

switch в Go лаконичен и мощен:

  • Неявного перехода к следующей ветви нет — явно используйте fallthrough
  • Оператор инициализации для ограничения области видимости временных переменных
  • switch без выражения как альтернатива цепочке if-else
  • Переключатель типов для диспетчеризации интерфейса
  • Несколько значений в одной ветви через запятую

Далее: управление циклами с помощью break, continue и меток.

Можно начать бесплатно

Изучай Go с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «Операторы switch в Go» бесплатный?

Да — полный текст урока «Операторы switch в Go» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Операторы switch в Go»?

switch с меткой и без метки, fallthrough Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Операторы switch в Go»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Операторы if и выражения инициализации
  2. Цикл for: все варианты
  3. Операторы switch в Go
  4. break, continue и метки
← Назад к Go Academy