Добавление элементов в массивы или срезы Golang

Рейтинг: -1Ответов: 1Опубликовано: 13.07.2023

Пытаю мозг и чуть изучаю этот язык, но застрял и не могу понять как сделать.

У меня есть тестовая программа. В ней цикл и после очередной итерации записывается новое значение в переменную.

Например ipToSt := ip.IP.String(). Естественно потом значение перезаписывается. Как мне их все добавить, например, в срез slice := []string{}? Чтобы на выходе fmt.Println(slice) было [bla1 bla2 bla3 bla4]?

Ответы

▲ 0

Добавление элемента в слайс делается функцией append (как уже ответили в комментариях). Я бы хотел еще посоветовать разобраться с устройством слайсов, в сети и в книгах есть много хороших описаний. Основные моменты:

  • слайс - это структура, которая содержит ссылку на данные (начало данных, array), длину (len) и емкость (cap): slice.go
  • append добавляет новый элемент (или элементы) к слайсу, увеличиваю длину, и если не хватает емкости, то увеличивает ее. Для этого выделяется новая область памяти для array и из старой копируются все значения в новую и добавляются новые элементы из вызова append. Емкость увеличивается сначала в два раза (на 100%) (чтобы избежать большого количества аллокаций и копирования), но если больше 512 элементов плавно уменьшаться до 25% . Код этого алгоритма можно найти здесь: slice.go
  • обратите внимание на случаи когда два слайса указывают на одну область памяти (в array одинаковый адрес). Такое часто происходит при реслайсинге, например, или при передаче слайса в функцию либо и т.п.