func main() {
var sliceA []int
b := []int{}
fmt.Println(sliceA == nil)
fmt.Println(b == nil)
fmt.Println(len(sliceA), cap(sliceA))
fmt.Println(len(b), cap(b))
fmt.Println(sliceA)
fmt.Println(b)
}
运行结果为
true
false
0 0
0 0
[]
[]
为什么当 b := []int{} 这样定义时,明明len cap都是0 却不等于nil
var sliceA []int len cap也是0 却等于nil呢
有疑问加站长微信联系(非本文作者)

b 初始化了;sliceA 却只是定义
请问本质区别是什么呢,能详细一点吗
我上面说的可能有一点不严谨;按照标准计算机语言的说法,b 是定义;sliceA 只是声明。
定义:声明了类型,同时进行初始化,也就是分配了内存空间 声明:只是声明了类型,并没有进行初始化,没有分配内存空间,所以是 nil
懂了 谢谢!
var sliceA []int 要实际应用中间还有一个步骤,make([]int,0,0)才能使用,而b := []int{}则不用。就能知道var sliceA []int实际没分配内存了