三分钟学 Go 语言——条件语句+switch和type switch

ifelse

if 20>0{
		fmt.Println("yes")
	}

输出

yes

ifelse

if 20<0{

	}else{
		fmt.Println("no")
	}

输出

no
switch 和 type switch

switch 好理解,是一个替代if else else else接口而提出的,如下,switch 后跟变量,case 后跟常量,只要变量值和常量匹配,就执行该分支下的语句。

switch name {
	case "coding3min":
		fmt.Println("welcome" + name)
	default:
		fmt.Println("403 forbidden:" + name)
		return
	}

当然switch语句会逐个匹配case语句,一个一个的判断过去,直到有符合的语句存在。

switch {
	case number >= 90:
		fmt.Println("优秀")
	case number >= 80:
		fmt.Println("良好")
	case number >= 60:
		fmt.Println("凑合")
	default:
		fmt.Println("太搓了")
	}

如果没有一个是匹配的,就执行default后的语句。

注意switch后可以跟空,如上

switch {

这样case就必须是表达式。

switch 的高级玩法?

有一个流传于坊间的神秘玩法,可以用switch语句来判断传入变量的类型,然后做一些羞羞的事情。x是一个未知类型的变量,switch t := x.(type) 用这个方式来赋值,t就是有确定类型的变量。

switch t := x.(type) {
	case int:
		return t
	case float64:
		return int(math.Ceil(t))
	}

什么叫未知类型??

这就是 go 中有意思的地方了, interface{} 类型,是一种神奇的类型,他可以是任何类型的接口,而具体的类型是实现。

var x interface{}
	x = 1
	fmt.Println(x)

输出1

所以完整的函数是这样的

func typeSwitchDemo(x interface{}) int {
	switch t := x.(type) {
	case int:
		return t
	case float64:
		return int(math.Ceil(t))
	}
	return 0
}

这个东西有什么用呢??有没有想过如果你有一个场景,你在调用第三方的接口,却发现对方的接口发生了微调,原来的int类型,被转换成了string类型,你必须写出兼容两种方式的代码来解析json

那么这个时候,type switch 将会是你的武器。

感兴趣可以 跑到这里看看,我是怎么使用这个武器的。

https://github.com/pzqu/how_to_code/blob/master/golang/medium/json_interface/fixed_json.go

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

机智的程序员小熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值