1.我经常看到在项目里面使用了下面这些代码
```go
if data != nil && len(data) != 0 {
do xxx
}
```
我就在思考,为啥要多写一个判断data != nil
因此我测试了下面的代码,发现完全可以去掉第一个判断
因为len(nil)==0,因此第一个判断去掉没有任何问题的
```go
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的
```go
if len(data) == n {
}
if len(data) != n {
}
```
有两种需要区分的切片声明方式,一种是 var s []int,这种叫做 nil 切片,底层数组是 nil,即没有依赖任何的底层数组。
一种是 s := make([]int),这种叫做空切片,底层数组不是 nil,而是长度为零的数组,即有依赖,但是为空的。这两种在 len() 计算的时候都会输出 0
#6
更多评论