Ответ
Этот вопрос затрагивает ключевое различие между массивами и слайсами в Go.
Массив (Array)
Нет, в массив нельзя добавить новый элемент. Массив в Go — это структура данных с фиксированным размером, который определяется на этапе компиляции. Размер является частью типа массива ([3]int
и [4]int
— это два разных, несовместимых типа).
Вы можете только изменять значения существующих элементов по индексу.
var arr [3]int // Массив на 3 элемента
arr[0] = 10
// arr[3] = 40 // Ошибка компиляции: invalid array index 3 (out of bounds for 3-element array)
// arr = append(arr, 40) // Ошибка компиляции: append не применим к массивам
Слайс (Slice)
Да, в слайс можно добавлять элементы с помощью встроенной функции append
. Слайс — это динамическая структура, которая представляет собой "вид" или "ссылку" на участок нижележащего массива. Слайс имеет длину (len
) и ёмкость (cap
).
Сложность добавления в слайс — амортизированная O(1), как описано в другом вопросе.
var slc []int // Слайс, изначально nil
slc = append(slc, 10) // OK
slc = append(slc, 20) // OK
slc = append(slc, 30) // OK
slc = append(slc, 40) // OK, при необходимости произойдет реаллокация
Итог: Вопрос о "добавлении элемента в конец" корректен только для слайсов. Для массивов такая операция невозможна из-за их фиксированного размера.