Ответ
В Go nil слайс и неинициализированный слайс — это одно и то же. Оба представляют нулевое значение для типа слайса.
var s1 []int // неинициализированный слайс (nil)
var s2 = []int{} // инициализированный пустой слайс (не nil)
fmt.Println(s1 == nil) // true
fmt.Println(s2 == nil) // false
Ключевые отличия:
- nil слайс имеет длину и вместимость 0
- append работает с nil слайсом, создавая новый массив
- json.Marshal(nilSlice) →
null, а пустого →[]