Сайт работает в тестовом режиме - все замечания, предложения и информацию о найденных ошибках направляйте, пожалуйста, в Telegram-группу
Курс в процессе наполнения. Полный курс доступен на Степике

Баг: Путать `switch` с выражением и без выражения

switch с выражением и без - две принципиально разные формы

Их легко перепутать, но они работают по-разному.

// Форма 1: switch с выражением
x := 5
switch x {   // x сравнивается с каждым case
case 5:
    fmt.Println("x равен 5")
}

// Форма 2: switch без выражения (как if-else)
switch {   // нет выражения - в case пишем условия
case x == 5:
    fmt.Println("x равен 5")
}

Ошибка новичка

Смешать обе формы: написать switch x и поставить условие в case:

// ❌ Не компилируется
x := 5
switch x {
case x > 3:   // Go ожидает значение типа int, а не условие (bool)
    fmt.Println("x больше 3")
}

В форме switch x - case должен содержать значение того же типа, а не условие.

Правило

Если нужно сравнить с конкретными значениями - используй switch x:

switch x {
case 1, 2, 3:
    fmt.Println("x равен 1, 2 или 3")
}

Если нужны условия - убери выражение:

switch {
case x > 3:
    fmt.Println("x больше 3")
}

Загрузка...