nil 是一个有效的长度为 0 的 slice,这意味着,
您不应明确返回长度为零的切片。应该返回nil 来代替。
Bad | Good |
---|---|
if x == "" { return []int{} } |
if x == "" { return nil } |
要检查切片是否为空,请始终使用len(s) == 0。而非 nil。
Bad | Good |
---|---|
func isEmpty(s []string) bool { return s == nil } |
func isEmpty(s []string) bool { return len(s) == 0 } |
零值切片(用var声明的切片)可立即使用,无需调用make()创建。
Bad | Good |
---|---|
nums := []int{} // or, nums := make([]int)
if add1 { nums = append(nums, 1) }
if add2 { nums = append(nums, 2) } |
var nums []int
if add1 { nums = append(nums, 1) }
if add2 { nums = append(nums, 2) } |
记住,虽然nil切片是有效的切片,但它不等于长度为0的切片(一个为nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。