Провал в следующую ветку в Go
Команда в конце ветки передает ход в соседнюю без новой проверки. Условие следующей ветки при этом не сравнивают с текущим значением: тело этой ветки выполняется так, будто совпадение уже нашли именно там.
Поставим число 1 и после первой
печати перейдем во вторую ветку:
n := 1
switch n {
case 1:
fmt.Println("one")
fallthrough
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
На экране "one" и "two".
Второе совпало бы и без провала, но здесь
важно другое: вторая ветка сработала даже
при другом числе, если перед ней стоит
переход из первой.
Такая команда должна быть последней в ветке. Любая строка после нее делает программу несобираемой:
n := 2
switch n {
case 1:
fmt.Println("a")
case 2:
fmt.Println("b")
fallthrough
fmt.Println("late")
case 3:
fmt.Println("c")
}
Дано число:
n := 1
Выведите "first" для 1,
затем перейди в следующую ветку и выведите
"second" для 2.
Дан следующий код:
n := 1
switch n {
case 1:
fmt.Println("x")
case 2:
fmt.Println("y")
}
Добавьте переход из первой ветки во вторую и скажите, что напечатается.
Дан следующий код:
switch 1 {
case 1:
fallthrough
fmt.Println("bad")
}
Скажите, соберется ли программа.