Как работает append для слайсов?

Junior
1.9k просмотров
AFK Offer AI

append добавляет элементы в слайс. Если capacity хватает — пишет в существующий underlying array. Если нет — аллоцирует новый массив (обычно x2 для маленьких слайсов, x1.25 для больших) и копирует данные.

s := make([]int, 0, 2)
s = append(s, 1, 2)    // len=2, cap=2, без аллокации
s = append(s, 3)        // len=3, cap=4, новый массив

Важно: всегда присваивай результат обратно: s = append(s, ...). Иначе можешь потерять ссылку на новый массив.

Ловушка: если два слайса делят один underlying array, append в один может перезаписать данные другого:

a := []int{1, 2, 3, 4}
b := a[:2]          // b = [1,2], но cap=4
b = append(b, 99)   // a теперь [1,2,99,4] — сюрприз!
Следующий вопрос

Что такое deadlock?