切片声明和初始化之间的区别
difference between slice declaration and initialization
a和b有什么区别?我知道 reflect.DeepEqual 认为它们不相等并且我知道 a 为零。是否有内置函数可以轻松显示差异?
var a []foo
b := []foo{}
a
的 zero value 使其为零。
nil
for pointers, functions, interfaces, slices, channels, and maps.
与 b
相反,它被初始化为 short declaration。
fmt.Println(a == nil, b == nil)
打印 true false
(游乐场:http://play.golang.org/p/E0nQP8dVyE)。 a
是一个 nil 切片,而 b 只是一个空切片。在实践中没有太大区别,但通常,在一个查询数据库的函数中,一个 nil 切片意味着没有结果(由于错误或其他原因),而一个空切片 - 它找不到信息.
有关较低级别的差异,请参阅 Russ Cox 的 Go Data Structures 文章。
a和b有什么区别?我知道 reflect.DeepEqual 认为它们不相等并且我知道 a 为零。是否有内置函数可以轻松显示差异?
var a []foo
b := []foo{}
a
的 zero value 使其为零。
nil
for pointers, functions, interfaces, slices, channels, and maps.
与 b
相反,它被初始化为 short declaration。
fmt.Println(a == nil, b == nil)
打印 true false
(游乐场:http://play.golang.org/p/E0nQP8dVyE)。 a
是一个 nil 切片,而 b 只是一个空切片。在实践中没有太大区别,但通常,在一个查询数据库的函数中,一个 nil 切片意味着没有结果(由于错误或其他原因),而一个空切片 - 它找不到信息.
有关较低级别的差异,请参阅 Russ Cox 的 Go Data Structures 文章。