Аллокация с помощью make в Go
В языке программирования Go существует встроенная функция
Дело в том, что вышеперечисленные три типа представляют под капотом линки на структуры данных, которые необходимо инициализировать перед применением. К примеру, срез (slice) -- это не что иное, как дескриптор из 3-х элементов, который содержит указатель на данные, длину и емкость, а пока эти элементы не станут инициализированными, срез будет равняться nil. При этом для срезов, каналов и карт make инициализирует внутреннюю структуру данных, подготавливая значение для использования.
Рассмотрим пример:
Функция в вышеприведенном примере аллоцирует массив из 100 int'ов, после чего создает структуру среза длиной 10/вместимостью 100, указывающую на первые десять элементов массива (следует понимать, что при создании среза емкость можно опустить). Тогда как
Для окончательного понимания разницы между функциями new и make, рассмотрим еще один пример:
Остается отметить, что функция make применяется лишь к картам, каналам и срезам, то есть она не возвращает указатель. Таким образом, если вы хотите получить явный указатель, следует воспользоваться функцией new либо выбрать адрес переменной явно.
По материалам https://golang-blog.blogspot.com/.