# Информация по append в Go `append` — одна из самых важных встроенных функций в Go для работы со слайсами. Ниже рассмотрены все возможные способы использования, примеры и пояснения. --- ## 🔧 Базовый синтаксис ```go append(slice, elems...) ``` - `slice` — срез, к которому добавляем - `elems...` — один или несколько элементов **или другой срез** --- ## ✅ Варианты использования ### 1. Добавить один элемент ```go nums := []int{1, 2} nums = append(nums, 3) // → [1 2 3] ``` --- ### 2. Добавить несколько элементов ```go nums = append(nums, 4, 5, 6) // → [1 2 3 4 5 6] ``` --- ### 3. Добавить другой срез ```go more := []int{7, 8} nums = append(nums, more...) // обязательно `...`! ``` --- ### 4. Добавить пустой срез ```go nums = append(nums, []int{}...) // всё ещё [1 2 3 4 5 6 7 8] ``` --- ### 5. Добавить к `nil`-срезу ```go var s []int s = append(s, 10) // работает, даже если s == nil ``` --- ### 6. Удалить элемент (по индексу) ```go i := 2 s = append(s[:i], s[i+1:]...) ``` --- ## 📐 Как работает `append` - Если у слайса **есть свободная capacity** — элементы просто добавляются. - Если нет — Go **создаёт новый массив**, копирует старые значения и добавляет новые. - Поэтому `append` может **изменить underlying array**. --- ## 🛠 Трюки с `append` ### 🔁 Объединение слайсов ```go a := []string{"a", "b"} b := []string{"c", "d"} a = append(a, b...) // → [a b c d] ``` --- ### 🪓 Удаление последнего элемента ```go s = s[:len(s)-1] ``` --- ## ⚠️ Важно помнить - `append` **всегда возвращает новый слайс** (возможно тот же, возможно новый) - Обязательно `...`, если добавляешь другой срез: `append(s, other...)` - Работает **только со слайсами**, не с массивами --- ## 🧠 Сводка
ИспользованиеПример
Один элемент`append(s, 10)`
Несколько элементов`append(s, 1, 2, 3)`
Добавить срез`append(s, other...)`
Удалить элемент`append(s[:i], s[i+1:]...)`
Работать с `nil`-срезом`append(nil, 1)`