1 var n1 int32 = 1 2 var n2 int64 = 2 3 if n1 < n2 { // invalid operation: n1 < n2 (mismatched types int32 and int64) 4 fmt.Println("OK") 5 } 6 7 switch n1 { 8 case n2: // invalid case n2 in switch on n1 (mismatched types int64 and int32) 9 fmt.Println("OK") 10 default: 11 fmt.Println("未匹配到!") 12 }
demo2
在switch后使用变量声明语句,在case后做条件判断
1 switch a := 4; { 2 case a == 1: 3 fmt.Println("a = 1") 4 case a == 2: 5 fmt.Println("a = 2") 6 case a == 3: 7 fmt.Println("a = 3") 8 default: 9 fmt.Println("未匹配到相等的值!") // 未匹配到相等的值! 10 } 11 // 以上语句每个case后的关系运算都会被执行,同if else
demo3
fallthrough
1 // fallthrough练习 2 switch num:=10; num { 3 case 5: 4 fmt.Println("ok5") 5 case 10: 6 fmt.Println("ok10") // ok10 7 fallthrough 8 case 20: 9 fmt.Println("ok20") // ok20 10 case 30: 11 fmt.Println("ok30") 12 default: 13 fmt.Println("没有匹配到...") 14 }
demo4
type switch的使用
1 var x interface{} 2 var y = 10.0 3 x = y 4 switch i := x.(type) { 5 case nil: 6 fmt.Printf("x 的类型是 %T \n", i) 7 case int: 8 fmt.Println("x 的类型是 int") 9 case float64: 10 fmt.Println("x 的类型是 float64") // x 的类型是 float64 11 case func(int) float64: 12 fmt.Println("x 的类型是 func(int)") 13 case bool, string: 14 fmt.Println("x 的类型是 bool 或 string") 15 default: 16 fmt.Println("未知类型") 17 }
习题:
1 // 练习1 2 // 每周一三五写接口,二四六写前端页面,周日休息 3 switch time.Now().Weekday() { 4 case time.Monday, time.Wednesday, time.Friday : 5 fmt.Println("今天写接口!") 6 case time.Tuesday, time.Thursday, time.Saturday : 7 fmt.Println("今天写前端页面!") 8 default: 9 fmt.Println("今天休息吧!") 10 }
1 // 练习2 2 // 使用switch把小写类型的char转成大写,只转换abcde,其他的输出other 3 var input byte 4 fmt.Println("请输入一个小写字母:") 5 fmt.Scanf("%c \n", &input) 6 switch input { 7 case 'a': 8 fmt.Println("A") 9 case 'b': 10 fmt.Println("B") 11 case 'c': 12 fmt.Println("C") 13 case 'd': 14 fmt.Println("D") 15 case 'e': 16 fmt.Println("E") 17 default: 18 fmt.Println("other char") 19 }
1 // 练习3 2 // 对学习成绩大于60的,输出“合格”,低于60分的输出“不合格”。注:输入的成绩不能高于100 3 var score uint8 4 fmt.Println("请输入考生成绩:") 5 fmt.Scanf("%d \n", &score) 6 switch { 7 case score >= 60 && score <= 100 : 8 fmt.Println("合格") 9 case score >= 0 && score < 60 : 10 fmt.Println("不合格") 11 default: 12 fmt.Println("输入的成绩不能高于100") 13 }
1 // 练习4 2 // 根据用户输入的月份,输出该月份所属的季节 3 var month uint8 4 fmt.Println("请输入月份:") 5 fmt.Scanf("%d \n", &month) 6 switch month { 7 case 3,4,5: 8 fmt.Printf("%d 月是春季 \n", month) 9 case 6,7,8: 10 fmt.Printf("%d 月是夏季 \n", month) 11 case 9,10,11: 12 fmt.Printf("%d 月是秋季 \n", month) 13 case 12,1,2: 14 fmt.Printf("%d 月是冬季 \n", month) 15 default: 16 fmt.Println("请输入1~12月!") 17 }
var n1 int32 = 1 var n2 int64 = 2 if n1 < n2 { // invalid operation: n1 < n2 (mismatched types int32 and int64) fmt.Println("OK") }