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

  • 您不应明确返回长度为零的切片。应该返回nil 来代替。

    BadGood
    if x == "" {
      return []int{}
    }
    if x == "" {
      return nil
    }
  • 要检查切片是否为空,请始终使用len(s) == 0。而非 nil

    BadGood
    func isEmpty(s []string) bool {
      return s == nil
    }
    func isEmpty(s []string) bool {
      return len(s) == 0
    }
  • 零值切片(用var声明的切片)可立即使用,无需调用make()创建。

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

最后编辑: kuteng  文档更新时间: 2021-05-09 20:12   作者:kuteng