switch 有切换,开关的意思,我想这也许就是代码上的意义,通过表达式计算出一个值,然后进行状态的匹配和然后进行流程上的切换。
基本语法:
switch 表达式 {
case 值a1,值a2, ...
语句块
case 值b1,值b2, ...
语句块
...
default :
语句块
}
简单记忆: switch 就是像是一个册封了的权力的头衔,表达式就像是一个将军。 当表达式给与了将军的头衔之后,他便开始开疆辟土 { } ,来了一个块作用域 ; 这里面有很多 表达式 计算出的值,就指向了 ,这个将军即将要去的地方,有茶馆,有电影院,有寺庙,有酒店,有图书管,有健身管, 语句块里面就像是将军在此场景下要做的事。default : 是默认,就是都没地方可去的时候,将军默认要做的事情,比如:睡觉休息。
package main
import "fmt"
func main() {
switch placeNo := 4; placeNo % 10 {
case 1, 2, 3:
fmt.Println("1喝茶")
fmt.Println("2喝茶")
fmt.Println("3喝茶")
case 4, 5:
fmt.Println("4看书")
fmt.Println("5看书")
fallthrough
case 6:
fmt.Println("6看书")
case 7, 8, 9:
fmt.Println("7健身")
fmt.Println("8健身")
fmt.Println("9健身")
default:
fmt.Println("啥也不干,在家休息")
}
}
注意事项:
1 . case 的值,不能重复 ,否则 build编译的时候 ,会 dupicate case。
2 . switch 后面的表达式,可以是一个常量值,变量,或可以取到值得函数 都可以。
3 . case 后的值的数据类型,必须和表达式的数据类型一致。
4 . case后面可以跟多种情况值, 如 本例。
5 . default 语句非必须,位置可以随意。一般放在最后。
6 . switch 可以不带表达式,只用case,当if 分支来使用。
7 . 和if一样支持在switch 后面定义变量,用分号分隔。但并不推荐。
8 . switch 穿透:利用fallthrough 关键字,如果在case 语句块后,增加 fallthrough ,会继续执行下一个case。如上的代码输出:4看书 5看书,就是因为 fallthrough 向下击穿了一个case,一个fallthrough,击穿的case, 有且仅有1一个。