15、Go 流程控制 - switch 语句
hi,我是温新
对于有多个 if、else if 、else
条件判断时,写起来很繁琐,可以使用 switch
语句进行改造。
在 Go 语言中,switch
表示选择语句的关键字,它会根据初始化表达式
得出一个值,然后根据 case
语句的条件,执行相应的代码块,最终返回特定的内容。
每一种 case
都是一种独立的情况,只有初始化表达式的值与之匹配时,case 才会被执行。
在 Go 语言中,switch 有 表达式 switch
和 类型 switch
这两种类型。
两种类型的 switch
表达式 switch
在表达式 switch
语句中,case 包含与 switch 表达式的值进行比较的表达式。
package main
import "fmt"
func main() {
grade := "A"
marks := 90
switch marks {
case 90:
grade = "A"
case 80:
grade = "B"
case 60, 79:
grade = "C"
default:
grade = "D"
}
fmt.Printf("你的成绩是%s\n", grade)
}
在这个案例中,switch 语句后跟着一个变量值,选择语句根据这个变量值来执行哪个 case。如果 marks=91
该执行哪个?对于这个问题进一个改造。
package main
import "fmt"
func main() {
grade := "A"
marks := 75
switch {
case marks >= 90:
grade = "A"
case marks >= 80:
grade = "B"
case marks >= 70:
grade = "C"
case marks >= 60:
grade = "D"
default:
grade = "E"
}
switch {
case grade == "A":
fmt.Println("优秀")
case grade == "B":
fmt.Println("良好")
case grade == "C", grade == "D":
fmt.Println("再接再厉")
default:
fmt.Println("别放弃治疗")
}
fmt.Println(grade)
}
在这个案例中,两个 switch 存在关联情况,第一个 switch 用于判断区间并得到 grade 的值,第二个 switch 再根据 grade 的值来输出相应的结果。
类型 switch
在类型 switch
中,case 包含与特殊注意的 switch 表达式的类型进行比较的类型。
package main
import "fmt"
// 空接口
var x interface{}
func main() {
x = "hello"
switch i := x.(type) {
case nil:
fmt.Printf("x 的类型是 %T", i)
case int:
fmt.Printf("x 的类型是 %T", i)
case float64:
fmt.Printf("x 的类型是 %T", i)
case bool:
fmt.Printf("x 的类型是 %T", i)
case string:
fmt.Printf("x 的类型是 %T", i)
default:
fmt.Println("未知类型")
}
}
类型 switch
语句中,判断条件必须是具有接口类型的变量。
switch 初始化语句
单值判断
package main
import "fmt"
func main() {
switch marks := 90; marks {
case 90:
fmt.Println("A")
case 80:
fmt.Println("B")
default:
fmt.Println("...")
}
}
范围表达式
package main
import "fmt"
func main() {
// 注意,分号不能省略
switch marks := 90; {
case marks >= 90:
fmt.Println("A")
case marks >= 80:
fmt.Println("B")
default:
fmt.Println("别放弃治疗")
}
}
请登录后再评论