What is the difference between a and b? I know that reflect.DeepEqual considers them not equal and I know that a is nil. Are there built in functions that easily show the difference?
var a []foo
b := []foo{}
What is the difference between a and b? I know that reflect.DeepEqual considers them not equal and I know that a is nil. Are there built in functions that easily show the difference?
var a []foo
b := []foo{}
fmt.Println(a == nil, b == nil)
prints true false
(Playground: http://play.golang.org/p/E0nQP8dVyE). a
is a nil slice, while b is just an empty slice. There isn't a lot of difference in practice, but usually, say in a function that queries a database, a nil slice means no result (due to error or something else), while an empty slice - that it could not find the information.
For the difference on the lower level, see Russ Cox's Go Data Structures article.