Senior
Que se passe-t-il avec un slice en Go si sa capacité est de 8 et que nous essayons d'ajouter le neuvième élément?
sobes.tech IA
Réponse de l'IA
В Go слайс — это структура, которая содержит указатель на массив, длину (len) и емкость (capacity). Емкость — это максимальное количество элементов, которое может вместить текущий массив.
Если у слайса capacity равна 8, и мы пытаемся добавить девятый элемент с помощью append, то происходит следующее:
- Go выделит новый массив с увеличенной емкостью (обычно в 2 раза больше текущей, то есть примерно 16).
- Скопирует все существующие элементы в новый массив.
- Добавит новый элемент.
- Вернёт новый слайс, указывающий на этот новый массив с обновлённой длиной и емкостью.
Таким образом, append автоматически расширяет слайс при превышении capacity, обеспечивая динамическое увеличение размера.
Пример:
s := make([]int, 8, 8) // длина и емкость 8
s = append(s, 9) // добавляем 9-й элемент
fmt.Println(len(s)) // 9
fmt.Println(cap(s)) // >= 9, обычно 16