Ответ
new и make в Go используются для выделения памяти, но для разных типов и целей:
-
new:- Возвращает указатель на нулевое значение типа (
*T). - Работает с любым типом (структуры, примитивы и т.д.).
- Память инициализируется нулевым значением типа.
- Возвращает указатель на нулевое значение типа (
p := new(int) // *int, значение 0
-
make:- Возвращает инициализированное (не нулевое) значение для slice, map и chan (не указатель!).
- Выделяет память и инициализирует внутренние структуры данных (например, хэш-таблицу для
map).
s := make([]int, 5) // []int с len=5, cap=5
m := make(map[string]int) // готовый к использованию map
Итог: new — для указателей на любые типы, make — только для slice/map/chan с инициализацией.