Равны ли между собой nil слайс и неинициализированный слайс

«Равны ли между собой nil слайс и неинициализированный слайс» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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, а пустого → []