Почему append возвращает slice

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

Ответ

append возвращает новый слайс, потому что исходный слайс может не иметь достаточной емкости (cap) для добавления элементов. В этом случае аллоцируется новый массив, и возвращается слайс, указывающий на него. Даже если емкости хватает, возвращаемое значение — это слайс с обновленной длиной (len), что делает API последовательным.

Пример:

s := []int{1, 2, 3}
s = append(s, 4) // Может изменить базовый массив
fmt.Println(s)    // [1 2 3 4]

Если не перезаписать исходный слайс, изменения потеряются:

s := []int{1, 2}
append(s, 3) // Без присваивания — бесполезно
fmt.Println(s) // [1 2]