Что произойдет, когда вы дойдете до конца одного дела Go, перейдет ли оно к следующему или предположите, что большинство приложений не хотят проваливаться?

23
mcandre 26 Ноя 2016 в 21:49

2 ответа

Лучший ответ

Нет, операторы переключения Go по умолчанию не пропускаются. Если вы действительно хотите, чтобы произошел провал, вы должны явно использовать оператор провала. Из спецификации:

В предложении case или default последний непустой оператор может быть (возможно помеченным) оператором "падения", чтобы указать, что управление должно переходить от конца этого предложения к первому оператору следующего предложения. В противном случае управление переходит к концу оператора switch. Оператор «падения» может появляться как последний оператор из всех, кроме последнего предложения переключателя выражения.

Например (извините, я не мог придумать реальный пример):

switch 1 {
case 1:
    fmt.Println("I will print")
    fallthrough
case 0:
    fmt.Println("I will also print")
}

https://play.golang.org/p/va6R8Oj02z

39
Sam Whited 26 Ноя 2016 в 20:28

Разрыв сохраняется по умолчанию, но не происходит падения. Если вы хотите перейти к следующему кейсу для матча, вы должны явно упомянуть провал.

switch choice {
case "optionone":
    // some instructions 
    fallthrough // control will not come out from this case but will go to next case.
case "optiontwo":
   // some instructions 
default: 
   return 
}
1
Pang 22 Июн 2020 в 06:37