Ответ
В Go слайс имеет zero value nil. Это означает, что он не инициализирован и не ссылается на массив.
Пример:
var s []int // s == nil
fmt.Println(s == nil) // true
Чтобы создать пустой (но не nil) слайс, можно использовать:
s := []int{} // s != nil, но len(s) == 0
Разница в поведении:
- nil слайс можно безопасно использовать в функциях типа
len(),cap(),append() - json.Marshal(nilSlice) →
null, а json.Marshal(emptySlice) →[]
Лучшая практика — возвращать nil для слайсов в функциях, если нет элементов, а не пустой слайс.