Uber Go 语言编程规范:nil 是一个有效的 slice

本文探讨了Go语言中slice的正确使用方式,包括如何区分nil slice与长度为0的slice,以及如何避免常见陷阱。文章提供了实用代码示例,帮助开发者更好地理解和运用slice。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nil是一个长度为0的有效的slice。这意味着:

  • 您不应该显式地返回一个长度为0的slice,应该返回 nil。

 Bad 

if x == "" {
  return []int{}
}

Good

if x == "" {
  //要返回nil
  return nil
}
  • 要检查一个slice是否是空empty的,请始终使用len(s) == 0,而不是去检查是否为nil

Bad

func isEmpty(s []string) bool {
 // nil 的 slice 也是有效的
  return s == nil
}

Good

func isEmpty(s []string) bool {
  return len(s) == 0
}
  • slice的零值(用var声明的slice)无需make()就可以立即使用

Bad

nums := []int{}
// or, nums := make([]int)

if add1 {
  nums = append(nums, 1)
}

if add2 {
  nums = append(nums, 2)
}

Good

//用var声明的slice零值是有效的
var nums []int

if add1 {
  nums = append(nums, 1)
}

if add2 {
  nums = append(nums, 2)
}

请记住,虽然nil slice 是一个有效的切片,但nil切片并不等同于一个长度为0的已分配切片(一个是nil,另一个不是),在不同的场景下(如序列化),这两个切片的处理方式可能不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DreamCatcher

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

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

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

打赏作者

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

抵扣说明:

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

余额充值