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,另一个不是),在不同的场景下(如序列化),这两个切片的处理方式可能不同。