>> А что будет, если читать дальше первого предложения? А будет неудобно:
> The length of a slice s can be discovered by the built-in function len; unlike with arrays it may change during execution.Да, действительно, неудобно очень читать до второго предложения и не видеть третье...
```
make([]T, length, capacity)
produces the same slice as allocating an array and slicing it, so these two expressions are equivalent:
make([]int, 50, 100)
new([100]int)[0:50]
```
ВНИМАТЕЛЬНО прочтите, что тут написано. Вот прямо дословно написано: "allocating array and slicing it". Даже для удобства гиперссылкой помечено, что такое "slicing". Вот там такое "Slice expressions construct a substring or slice from a string, array, pointer to array, or slice."
Понимаете, аллоцируется массив, слайс аллоцироваться не умеет, он просто диапазон "с элемента X по элемент Y массива Z". Вот прямо здесь, в примере из официальной спецификации, мы выделили массив на 100 элементов, и из этого уже алоцированного массива получили слайс - view'ха на первые 50 из них. И append'ить вы можете, но только в пределах cap'а, который равен длине массива. Если за cap вылазите, создается НОВЫЙ СЛАЙС. Потому и append так странно выглядит.
Еще раз повторю: слайс - это диапазон, определенный над массивом, о чем вам в ОФИЦИАЛЬНОЙ СПЕЦИФИКАЦИИ прямым текстом говорят. В связи с этим слайс не умеет ничего алоцировать и ресайзить, что делает его буквально представлением над обычным массивом константной длины. Он, в конце концов, даже называется, прямым текстом, "slice". Не dynamic array, не list, не vector, он именно slice - погуглите перевод.
Вот вы прямым текстом тут писали, что у слайса cap измениться может.
Давайте попробуем:
a := make([]int, 0, 10) // очевидно, cap=10 же?
Подскажите мне, пожалуйста, каким штатным образом (без рефлексии и unsafe-блоков) я могу изменить cap конкретно этого слайса. Покажете - 10 баксов дам! Не покажете - слайс не является динамическим массивом (ЧИТД)