切片声明和初始化之间的区别

时间:2015-05-13 05:48:06

标签: go initialization slice

a和b有什么区别?我知道reflect.DeepEqual认为它们不相等,我知道a是零。是否有内置功能可以轻松显示差异?

var a []foo
b := []foo{}

2 个答案:

答案 0 :(得分:3)

fmt.Println(a == nil, b == nil)

打印true false(游乐场:http://play.golang.org/p/E0nQP8dVyE)。 a是一个零切片,而b只是一个空切片。在实践中没有太多的区别,但通常,在查询数据库的函数中,nil切片意味着没有结果(由于错误或其他),而空切片 - 它无法找到信息。

有关较低级别的差异,请参阅Russ Cox的Go Data Structures文章。

答案 1 :(得分:2)

a的{​​{3}}使其无效。

  

nil 用于指针,函数,接口,切片,频道和地图。

b相对,后者被初始化为zero value