Comments 8
Перечитал ссылки по теме на глубину=3, но ни бенчмарков, ни хоть какого-то убедительного объяснения, что от этого улучшилось (кроме эстетичестких чувств - ну как так, функция немонотонная) так и не нашёл.
А зачем в го векторы называются срезами?
В Go есть массивы. Они жестко заданы по размеру. Срез - это указатель на массив, который может изменять свой размер и "бегать" своим начальным указателем по массиву в пределах нижележащего массива. Например на массив из 5 элементов можно создать срез [0:3] - элементы массива 0,1,2, но затем этот же срез переделать на [3,5] - элементы 3, 4. Но под срезом внутри всегда находится массив. Изменяя элемент среза мы изменяем элемент массива. Но в срез можно и добавить элементы, тогда автоматически создастся новый массив, в него скопируются элементы из старого массива и вернется новый указатель на новый массив, этим и занимается функция append.
Но в срез можно и добавить элементы, тогда автоматически создастся новый массив, в него скопируются элементы из старого массива и вернется новый указатель на новый массив, этим и занимается функция append.
Хорошо а чем это отличается от вектора во всех остальных языках то?
Зачем путать людей и называть вектор срезом, который вообще-то подразумевает совсем другую, неизменяемую, семантику.
Спасибо за статью) раскидал своим ребятам.
Спасибо, полезно!
За советы и побуждение к статье спасибо Артёму Башкирову:)
Изменения функции append в Go 1.18