首页 > 一个关于slice的问题

一个关于slice的问题

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 == nilarr == nil实际上是让arr和brr去和[]int(nil)做比对,很明显,[]int(nil)arr的值是一样的.


实际上...你被println骗了...哈哈

试试

fmt.Printf("%#v\n", arr)
fmt.Printf("%#v\n", brr)

你会发现真相的...

【热门文章】
【热门文章】