基本语法:
switch 表达式 {
case 表达式1,表达式2,…:
语句块1
case 表达式3,表达式4:
语句块2
default:
语句块3
}
switch 大体流程:
简单举个栗子:
输入一个字符,跟对应的字符进行匹配,输出不同的结果:
package main
import (
"fmt"
)
func main(){
// 1.定义一个变量接收字符
// 2.使用switch 完成
var key byte
fmt.Println("输入a, b, c, d字符, 进行匹配")
fmt.Scanf("%c", &key)
switch key {
case 'a':
fmt.Println("输入的是a")
case 'b':
fmt.Println("输入的是b")
case 'c':
fmt.Println("输入的是c")
case 'd':
fmt.Println("输入的是d")
default:
fmt.Println("输入超出范围")
}
}
case/switch 后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以):
// 写一个简单的函数
func test(char byte) byte{
return char
}
func main(){
var key byte
fmt.Println("输入a,b,c,d 对应获取不同的结果")
fmt.Scanf("%c", &key)
// case/switch 后面可以是一个有返回值的函数
switch test(key) {
case 'a':
fmt.Println("输入的是a")
case 'b':
fmt.Println("输入的是b")
case 'c':
fmt.Println("输入的是c")
case 'd':
fmt.Println("输入的是d")
default:
fmt.Println("输入超出范围")
}
}
case 后 的表达式的值数据类型,必须和 switch 表达式数据类型一致:
func main(){
var i int32
var j int64
// switch 后面表达式 跟case后面表达式 数据类型不同 错误示范
switch i {
case j:
fmt.Println("ok")
default:
fmt.Println("输出default里面内容")
}
}
case 后面可以跟多个表达式,使用逗号隔开:
func main(){
var i int32
var j int32
var k int32
// case 后面可以跟多个表达式, 使用逗号隔开
switch i {
case j, k, 10:
fmt.Println("ok")
default:
fmt.Println("输出default里面内容")
}
}
case 后面的表达式,如果是常量值(字面值),要求不能重复:
func main(){
var n1 int32 = 5
var n2 int32 = 20
// 值 不能进行重复使用, 常量5已经使用 第二个case 则不能再次使用
switch n1 {
case n2, 5:
fmt.Println("ok1")
case 5:
fmt.Println("ok2")
default:
fmt.Println("输出default里面内容")
}
}
case 后面 不需要带 break;
default 语句并不是必须的:
func main(){
var n1 int32 = 5
var n2 int32 = 20
// default 语句并不是必有的
switch n1 {
case n2, 5:
fmt.Println("ok1")
}
}
switch 后 可以不带表达式,类似 if—else 分支来使用:
func main(){
var n1 int32 = 5
// switch 语句后, 不需要跟表达式 类似 if --- else 分支
switch {
case n1 == 5:
fmt.Println("ok1")
case n1 == 10:
fmt.Println("ok2")
default:
fmt.Println("default")
}
var age int64 = 18
switch {
case age >= 18 && age < 60:
fmt.Println("成人票")
case age < 18 && age >= 15:
fmt.Println("青年票")
case age > 12 :
fmt.Println("儿童票")
default:
fmt.Println("是什么票呢?")
}
}
switch 后 也可以直接声明、定义一个变量,分号结束,不推荐使用
:
func main(){
// switch 语句后,直接声明、定义一个变量, 不推荐使用, 用分号结束
switch age:= 18;{
case age >= 18 && age < 60:
fmt.Println("成人票")
case age < 18 && age >= 15:
fmt.Println("青年票")
case age > 12 :
fmt.Println("儿童票")
default:
fmt.Println("是什么票呢?")
}
}
switch 穿透 fallthrough,如果在 case 语句后增加fallthrough,会继续执行下一个 case,也叫switch 穿透:
func main(){
// switch fallthrough 的使用
var age int64 = 18
switch {
case age >= 18 && age < 60:
fmt.Println("成人票")
fallthrough
case age < 18 && age >= 15:
fmt.Println("青年票")
case age > 12 :
fmt.Println("儿童票")
default:
fmt.Println("是什么票呢?")
}
}