tg-me.com/golang_for_two/53
Last Update:
Note # 28 fallthrough или “проваливаемся” дальше ⤵️
Go содержит интересное ключевое слово fallthrough
, которое на практике встречается довольно редко, его главная задача передать управление следующему оператору case
в условных конструкциях switch/case
.
Итак поехали 🚴♂️:
func main() {
switch 42 {
case 42:
fmt.Println("First case: 42!")
fallthrough
default:
fmt.Println("Second case")
}
}
// First case: 42!
// Second case
Т.е по дефолту в Go switch/case не проваливается дальше - это нужно делать явно используя ключевое слово
fallthrough
.Не разрешается использовать в последнем операторе неважно это
case
или default
:func main() {
switch 42 {
case 42:
fmt.Println("First case: 42!")
default:
fmt.Println("Second case")
fallthrough
}
}
// cannot fallthrough final case in switch
Соответственно такой вариант вполне валидный:
func main() {
switch 42 {
default:
fmt.Println("Second case")
fallthrough
case 42:
fmt.Println("First case: 42!")
}
}
// First case: 42!
Важный момент, "fallthrough" не разрешается использовать в связке с type switch:
func main() {
var pi interface{} = 3.14
switch i := pi.(type) {
case int:
fmt.Printf("%v", i)
fallthrough
default:
fmt.Println("don't know the type")
}
}
// ./prog.go:18:3: cannot fallthrough in type switch
Так же нельзя делать вложенные конструкции которые содержат
fallthrough
☔️:func main() {
switch 42 {
case 42:
fmt.Println("First case: 42!")
if true {
fallthrough
}
case 1:
fmt.Println("First case: 1!")
}
}
// ./prog.go:18:4: fallthrough statement out of place
Useful links:
- ref - https://golang.org/ref/spec#Switch_statements
- wiki https://github.com/golang/go/wiki/Switch
BY 🇺🇦 Go for two :)
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/golang_for_two/53