1.我经常看到在项目里面使用了下面这些代码
if data != nil && len(data) != 0 {
do xxx
}
我就在思考,为啥要多写一个判断data != nil
因此我测试了下面的代码,发现完全可以去掉第一个判断
因为len(nil)==0,因此第一个判断去掉没有任何问题的
package main
import "fmt"
func main() {
var data1 []interface{} = nil
data2 := []interface{}{}
data3 := make([]interface{}, 0, 8)
fmt.Println(len(data1), len(data2), len(data3))
}
result:0 0 0
2.由此还能想到很多其他场景,下面两个也没必要判断data==nil的
if len(data) == n {
}
if len(data) != n {
}
有疑问加站长微信联系(非本文作者)

是的,如果确定是一个slice, 的确不需要判断是否nil, 这属于画蛇添足了, 因为slice天生就不可能为nil
slice是可能为nil的,只是len求nil的slice也是等于0所以才不需要判断nil额。
666
var is []int is为nil,虽然这种声明没啥意义
这种生命是有意义的, 声明的意义在于制定了变量的类型. 虽然没有初始化也可以使用了.
有两种需要区分的切片声明方式,一种是 var s []int,这种叫做 nil 切片,底层数组是 nil,即没有依赖任何的底层数组。 一种是 s := make([]int),这种叫做空切片,底层数组不是 nil,而是长度为零的数组,即有依赖,但是为空的。这两种在 len() 计算的时候都会输出 0
是的,#6说的很好,空切片是这么声明的,s := make([]int, 5)
是没有意思
遇到不判断,有概率报错 XJD