Меняется ли capacity при уменьшении слайса

«Меняется ли capacity при уменьшении слайса» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При уменьшении слайса (например, через slice = slice[:n]) capacity не изменяется. Слайс — это лишь "окно" в базовый массив, и capacity отражает максимальную длину, которую может иметь слайс без переаллокации.

Пример:

s := make([]int, 5, 10) // len=5, cap=10
s = s[:3]               // len=3, cap=10 (capacity осталась прежней)

Однако если уменьшать слайс через append или копирование в новый массив, capacity может измениться, так как создается новый базовый массив.