В чем разница между new и make

«В чем разница между new и make» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 с инициализацией.