Увеличение размера среза в Go происходит по следующему алгоритму при использовании функции append():
cap(s) >= len(s) + len(elements)), то элементы просто добавляются в конец текущего базового массива, а новый срез указывает на эту область.requiredCap > 2 * oldCap), то новая емкость равна требуемой.oldCap < 1024), то новая емкость удваивается (newCap = oldCap * 2).oldCap >= 1024), то новая емкость увеличивается на 25% (newCap = oldCap + oldCap/4), пока не станет больше или равна требуемой.append() возвращает новый срез, указывающий на новый базовый массив.При этом, старый срез и его базовый массив могут быть в дальнейшем убраны сборщиком мусора, если на них больше нет ссылок.