GO学习 --- switch分支

一、switch分支

switchI语句用于基于不同条件执行不同动作,每- 一个case分支都是唯- -的, 从上到下逐一测试,直到匹配为止。匹配项后面也不需要再加break

基本语法:

switch 表达式 {

      case表达式1,表达式2, ...

       语句块1

      case表达式3,表达式4, .. :

default:

语句块

}

二、流程图

 三、入门练习

请编写一个程序,该程序可以接收一个字符,比如:a,b.c,d,ef.g a表示星期一 ,b表示星期二根据用户的输入显示相依的信息,要求使用switch 语句完成

//switch的使用
package main
import (
	"fmt"
)
func main(){
	//定义一个变量,用于接收用户输入
	var key byte
	fmt.Println("请输入一个字符")
	fmt.Scanf("%c",&key)
	//使用switch进行判断
	switch key {
		case 'a':
			fmt.Println("星期一")
	    case 'b':
			fmt.Println("星期二")
	    case 'c':
			fmt.Println("星期三")
	    case 'd':
			fmt.Println("星期四")
	    case 'e':
			fmt.Println("星期五")
	    case 'f':
			fmt.Println("星期六")
	    case 'g':
			fmt.Println("星期日")
		default:
			fmt.Println("请正确输入")

	}
}

四、注意细节

1、case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)

//switch的使用
package main
import (
	"fmt"
)
//定义一个函数
func test(b byte) byte {
	return b + 1
}
func main(){
	//定义一个变量,用于接收用户输入
	var key byte
	fmt.Println("请输入一个字符")
	fmt.Scanf("%c",&key)
	//使用switch进行判断
	switch key { //变量
		case 'a': 
			fmt.Println("星期一")
	    case test(key): //函数
			fmt.Println("星期二")
	    case test(key) + 1: //函数运算
			fmt.Println("星期三")
	    case 'd':
			fmt.Println("星期四")
	    case 'e':
			fmt.Println("星期五")
	    case 'f':
			fmt.Println("星期六")
	    case 'g':
			fmt.Println("星期日")
		default:
			fmt.Println("请正确输入")

	}
}}

 2、case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致

//switch的使用
package main
import (
	"fmt"
)

func main(){
	var a1 int = 10
	var a2 int8 = 10
	switch a1 { //错误,数据类型不一致
		case a2 :
			fmt.Println("匹配成功")
		default:
			fmt.Println("匹配失败")
	}
	
}

 3、case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2...

//switch的使用
package main
import (
	"fmt"
)
func test(k int) int {
	return k
}
func main(){
	var a1 int = 20
	var a2 int = 10
	switch a1 { 
		case a2 , 15, test(20):
			fmt.Println("匹配成功")
		default:
			fmt.Println("匹配失败")
	}
	
}

 4、case后面的表达式如果是常量值(字面量),则要求不能重复

//switch的使用
package main
import (
	"fmt"
)
func test(k int) int {
	return k
}
func main(){
	var a1 int = 20
	var a2 int = 10
	switch a1 { 
		case a2 , 15, test(20):
			fmt.Println("匹配成功")
		case 15: //错误,常量重复,但是用变量不会
			fmt.Println("匹配通过")	
		default:
			fmt.Println("匹配失败")
	}
	
}

 5、case后面不需要带break ,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果-一个都匹配不到,则执行default【参考代码入门练习

6、default语句不是必须的

//switch的使用
package main
import (
	"fmt"
)
func test(k int) int {
	return k
}
func main(){
	var a1 int = 20
	var a2 int = 10
	switch a1 { 
		case a2 , 15, test(30):
			fmt.Println("匹配成功")
		case 25 :
			fmt.Println("成功")
	}
	
}

7、switch后也可以不带表达式,类似if-else分支来使用。

//switch的使用
package main
import (
	"fmt"
)
func test(k int) int {
	return k
}
func main(){
	//对值判断
	var a1 int = 20
	switch  { 
		case a1 == 20:
			fmt.Println("匹配成功")
		default:
			fmt.Println("匹配失败")
	}
	//对范围进行判断
	var a2 int = 25
	switch {
		case a2 >= 30 && a2 < 40:
			fmt.Println("ok1")
		case a2 > 20 && a2 < test(40):
			fmt.Println("ok2")
		default:
			fmt.Println("没有匹配")		
	}
	
}

 8、switch后也可以直接声明/定义一个变量,分号结束,不推荐。

//switch的使用
package main
import (
	"fmt"
)
func main(){
	//对值断
	switch a1 := 20;{ //一定要带分号
		case a1 == 20:
			fmt.Println("匹配成功")
		default:
			fmt.Println("匹配失败")
	}
}

 9、switch穿透fllthrough,如果在case语哥块后增加allthrough ,则会继续执行下一个case,也叫switch穿透。

//switch的使用
package main
import (
	"fmt"
)
func main(){
	//定义一个变量,用于接收用户输入
	var key byte
	fmt.Println("请输入一个字符")
	fmt.Scanf("%c",&key)
	//使用switch进行判断
	switch key {
		case 'a':
			fmt.Println("星期一")
			fallthrough //默认只穿透一层
	    case 'b':
			fmt.Println("星期二")
	    case 'c':
			fmt.Println("星期三")
	    case 'd':
			fmt.Println("星期四")
	    case 'e':
			fmt.Println("星期五")
	    case 'f':
			fmt.Println("星期六")
	    case 'g':
			fmt.Println("星期日")
		default:
			fmt.Println("请正确输入")

	}
}

 10、Type Switch: switch 语句还可以被用于type switch来判断某个interface 变量中实际指向的变量类型

package main
import (
	"fmt"
)

func main(){
  var x interface{}
  var y = 12.0
  x = y
  switch i := x.(type) {
  	case nil:
		fmt.Println("x 的类型~ :%T",i)
	case int:
		fmt.Println("x 是 int类型")
    case float64:
		fmt.Println("x 是 float64")
	case func(int) float64:
		fmt.Println("x 是 func(int) 型")
	case bool, string:
		fmt.Println("x 是 bool 或者 string 型")	
	default:
		fmt.Println("没有对应的类型")
  }
}

 五、练习一

使用switch把小写类型的char型转为大写(键盘输入)。只转换a, b,c, d,e.其它的输出“other"

//switch的使用
package main
import (
	"fmt"
)
func main(){
	//定义个变量
	var a1 byte 
	//在键盘输入
	fmt.Println("请任意输入一个字母")
	fmt.Scanf("%c",&a1)
	//使用switch判断
	switch  {
		case a1 >='a' && a1 <= 'e':
			fmt.Printf("%c",a1 - 32) //使用ascii码得到大写字母
		default:
			fmt.Println("other")	
	}
}

练习二

对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。(注:输入的成绩不能大于100)

//switch的使用
package main
import (
	"fmt"
)
func main(){
	var a1 float64 
	fmt.Println("请输入学生成绩")
	fmt.Scanln(&a1)
	switch {
		case a1 <= 100 && int(a1 / 60) == 1 :
			fmt.Println("合格")
		case a1 >= 0 && int(a1 / 60) == 0 :
			fmt.Println("不合格")
		default:
			fmt.Println("请输入正确的成绩")
	} 
}

 练习三

根据用户指定月份,打印该月份所属的季节。3,4,5 春季,6,7,8夏季,9,10,11秋季,12, 1,2冬季

//switch的使用
package main
import (
	"fmt"
)
func main(){
	var a1 int8 
	fmt.Println("请输入当前月份")
	fmt.Scanln(&a1)
	switch a1{
		case 3, 4 , 5 :
        	fmt.Println("春季")
		case 6, 7, 8 :
			fmt.Println("夏季")
		case 9, 10, 11 :
			fmt.Println("秋季")
		case 12, 1, 2 :
			fmt.Println("冬季")
        default:
			fmt.Println("请输入正确的月份")
	} 
}

练习四

 根据用户输入显示对应的星期时间(tring),如果“星期一”,显示“干煸豆角”如果“星期二”,显示“醋溜土豆”如果“星期三”,显示“红烧狮子头”如果“星期四,显示“油炸花生米”如果“星期五”,显示“蒜蓉扇贝”如果“星期六”,显示“东北乱炖”如果“星期日”,显示“大盘鸡”。

//switch的使用
package main
import (
	"fmt"
)
func main(){
	var key string
	fmt.Println("请输入星期几")
    fmt.Scanf("%s",&key)
	switch key {
		case "星期一" :
			fmt.Println("干煸豆角")
		case "星期二" :
			fmt.Println("醋溜土豆")
		case "星期三" :
			fmt.Println("红烧狮子头")
		case "星期四" :
			fmt.Println("油炸花生米")
		case "星期五" :
			fmt.Println("蒜蓉扇贝")
		case "星期六" :
			fmt.Println("东北乱炖")
		case "星期日" :
			fmt.Println("大盘鸡")
		default:
			fmt.Println("请正确输入")	
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值