В чем разница между объявлением slice через var, через make и через присваивание по индексу или append

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

Ответ

var s []int - создает nil slice (len=0, cap=0), готовый к append, но без выделенной памяти.

make([]int, len, cap) - создает slice с заданной длиной и емкостью, инициализированный нулями.

Присваивание по индексу (s := []int{1,2,3}) создает slice с конкретными значениями (len=cap=3).

append работает с любым slice, выделяя память при необходимости.

Пример:

var s1 []int          // nil slice
s2 := make([]int, 3)  // [0, 0, 0]
s3 := []int{1, 2, 3}  // [1, 2, 3]
s1 = append(s1, 1)    // [1]

var - для отложенной инициализации, make - для предварительного выделения памяти, литерал - для конкретных значений.