
Баг: Путать `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")
}Загрузка...