点击上方蓝色 “铁匠学编程” 关注我,让我们一起学习!
switch语句会根据传入条件不同,选择不同的分支执代码进行执行,他可以代替多个 if else 子句,Go 语言的分支语句和 PHP 的类似,Go 不需要显示的通过break 进行退出。
package mainimport "fmt"func main() { score := 100 switch { case score >= 90: fmt.Println("Grade: A") case score >= 80 && score < 90: fmt.Println("Grade: B") case score >= 70 && score < 80: fmt.Println("Grade: C") case score >= 60 && score < 70: fmt.Println("Grade: D") default: fmt.Println("Grade: F") }}
在上面的程序中,switch 会将 score 与每个 case 语句进行从上到下的比较,并执行与选项匹配的第一个代码块进行执行。
注意:此处的 score 不能放到 switch 后面,否则会报错,只有在进行分支判断时候才可以
在选项列表中,不允许出现重复相等的条件判断,如下:
package mainimport "fmt"func main() { score := 100 switch { case score = 90: fmt.Println("Grade: A") case score = 90: ... default: fmt.Println("Grade: F") }}
上面的程序编译时会报错。
在Go语言中,我们可以用逗号分隔不同的分支条件来合并分支语句,如 case 90,100
,这里我们不能像PHP 那样通过多个相邻的 case 语句来合并相同的分支语句,如下:
package mainimport "fmt"func main() { switch score := 99; score { case score 90: // 此时被m默认为空语句直接退出 case score 95: fmt.Println("grade A") case score 80, 85: fmt.Println("grade B") default: fmt.Println("grade F") }}
上面的例子中我们都添加了默认情况,就是在所有的分支语句都不匹配的时候,将运行默认情况,他的位置并不一定在最后,任何地方都可以。
fallthrough
前面我们说到不能通过相邻的 case 语句来合并相同的分支语句,我们可以通过 逗号 分隔来进行执行多个条件来合并语句。Go 语言在执行完某一个条件分支之后会自动退出当前条件语句,如果还想继续执行后续的分支语句,可以通过 fallthrough 来继续执行后面的分支语句。如下:
package mainimport "fmt"func main() { score := 60 switch score { ... case 60: fallthrough case 65: fmt.Println("Grade: D") ... } }
此时,就相当于合并了 case 60 和case 65 两个分支语句。
Go语言 的 Reflect 会根据类型断言进行判断,后面分享 反射的时候再来说。
如果您看到了我的文章,欢迎留下意见和建议,指出不足。感谢!
加油!不仅自己~还有你~