golang小技巧和易错点

1. fallthrough关键字
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

func main() {
   i := 10
   switch i {
   case 1:
      fmt.Println(1)
   case 5:
      fmt.Println(5)
      fallthrough
   case 10:
      fmt.Println(10)
      fallthrough
   case 20:
      fmt.Println(20)
   default:
      fmt.Println("default")
   }
}

运行结果:

10
20

2. 简式变量声明仅能在函数内部使用

// 第一种
var i int
i = 10

// 第二种 (简式变量声明)
i := 10 

3. || vs ??
||??(ES2020 引入)都是指定默认值
读取对象属性的时候,如果某个属性的值是nullundefined,有时候需要为它们指定默认值。常见做法是通过||??运算符指定默认值

const firstName = message?.body?.user?.firstName || 'default';

||??的区别在于:
使用||:属性的值如果是nullundefined,或者为空字符串或false0,默认值都会生效
使用??:属性的值只有是nullundefined,默认值才会生效
?. 说明
ES2020 引入的“链判断运算符”
适用场景:读取对象内部的某个属性,需要判断属性的上层对象是否存在
上面代码使用了?.运算符,直接在链式调用的时候判断,左侧的对象是否为nullundefined。如果是的,就不再往下运算,而是返回undefined
等价实例:

a?.b
// 等同于
a == null ? undefined : a.b
​
a?.[x]
// 等同于
a == null ? undefined : a[x]
​
a?.b()
// 等同于
a == null ? undefined : a.b()
​
a?.()
// 等同于
a == null ? undefined : a()

注:如果a?.b()里面的a.b有值,但不是函数,不可调用,那么a?.b()是会报错的。a?.()也是如此,如果a不是nullundefined,但也不是函数,那么a?.()会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值