var arr []int
brr := make([]int, 0)
// 这个两个输出时一样的
fmt.Println(arr)
fmt.Println(brr)
fmt.Println(arr == nil) // 输出true
fmt.Println(brr == nil) // 输出false
为什么会是这样的结果?一个ture,一个false
如果是想要简单的可以通过println(arr)
println(brr)
你可以看到两个值,第一个是类型对应的地址,第二个是值实际的地址,你应该可以看到arr和brr打印出来第一个参数是非0的(都是[]int),然后第二个参数,arr是0x0, brr则不是。
而这时候brr == nil
和arr == nil
实际上是让arr和brr去和[]int(nil)
做比对,很明显,[]int(nil)
和arr
的值是一样的.
实际上...你被println骗了...哈哈
试试
fmt.Printf("%#v\n", arr)
fmt.Printf("%#v\n", brr)
你会发现真相的...