golang中切片有必要判断是否为nil么

二维码
| Jun 14, 2020 | 原创

golang 中切片(slice)其实相当于其他语言的动态数组,切片使用起来也非常简单,切片的使用并非一定需要初始化,只要声明后即可在后续操作中即可随时使用,当然在性能上来说声明指定长度的切片和未定义长度的切片肯定是有差别的。

但是,实际开发中,如果你存储的数据量比较小,其实这种差距并不是很明显。本文打算总结一下切片数组的一些常规操作探究。

// 声明一个字符串切片
var arr []string

使用 var 关键字声明的切片(slice),默认为 nil ,和声明一个空切片还是有差别的:

arr := []string{}

go 语言在处理空切片类型和 nil 类型的切片时都不会有任何问题,所以如下的场景是完全没有任何问题的:

var arr []string

fmt.Println(len(arr))  // 长度为:0

// 循环迭代操作也没任何问题,不会报错
for _, s := range rel {
    fmt.Println(s)
}

所以,如非必要,在操作切片类型时,并非必须判断返回值是否为 nil ,让代码也变得极为简洁:

var arr []string

// 此处的判断有点多余,没啥必要
if arr == nil {
    log.Fatal("arr is nil")
}

// 其他操作
// ...