前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三分钟学 Go 语言——条件语句+switch和type switch

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

作者头像
机智的程序员小熊
发布2020-04-21 16:04:27
5200
发布2020-04-21 16:04:27
举报
文章被收录于专栏:技术面面观技术面面观
ifelse
代码语言:javascript
复制
if 20>0{
  fmt.Println("yes")
 }

输出

代码语言:javascript
复制
yes

ifelse

代码语言:javascript
复制
if 20<0{

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

输出

代码语言:javascript
复制
no
switch 和 type switch

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

代码语言:javascript
复制
switch name {
 case "coding3min":
  fmt.Println("welcome" + name)
 default:
  fmt.Println("403 forbidden:" + name)
  return
 }

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

代码语言:javascript
复制
switch {
 case number >= 90:
  fmt.Println("优秀")
 case number >= 80:
  fmt.Println("良好")
 case number >= 60:
  fmt.Println("凑合")
 default:
  fmt.Println("太搓了")
 }

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

注意switch后可以跟空,如上

代码语言:javascript
复制
switch {

这样case就必须是表达式。

switch 的高级玩法?

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

代码语言:javascript
复制
switch t := x.(type) {
 case int:
  return t
 case float64:
  return int(math.Ceil(t))
 }

什么叫未知类型??

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

代码语言:javascript
复制
var x interface{}
 x = 1
 fmt.Println(x)

输出1

所以完整的函数是这样的

代码语言:javascript
复制
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

如有收获,点个在看,诚挚感谢

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机智的程序员小熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如有收获,点个在看,诚挚感谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档