В Go операторы new и make служат для выделения памяти, но применяются к разным типам и имеют разные цели:
Можете объяснить различия между операторами new и make в языке Go?
В Go операторы new и make служат для выделения памяти, но применяются к разным типам и имеют разные цели:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Go операторы new и make служат для выделения памяти, но применяются к разным типам и имеют разные цели:
- new(T) выделяет память под тип T, инициализирует её нулевым значением и возвращает указатель *T. Используется для всех типов, но возвращает указатель.
- make(T, args...) используется только для инициализации срезов, карт (map) и каналов (chan). Возвращает инициализированное значение типа T (не указатель).
Пример:
p := new(int) // p имеет тип *int, указывает на 0
s := make([]int, 5) // s — срез длины 5, готов к использованию
m := make(map[string]int) // инициализированная карта
Итого:
- new — выделяет память и возвращает указатель.
- make — инициализирует сложные структуры данных и возвращает значение.