Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: make, new, allocation, initialize, map

Что делает функция make и чем она отличается от new?

Этот вопрос проверяет понимание аллокации и инициализации встроенных типов в Go.

Короткий ответ

new(T) выделяет память под тип T, возвращает указатель *T с нулевым значением. make(T, args…) инициализирует и возвращает сам тип (не указатель) для срезов, мап и каналов: make([]T, len, cap), make(map[K]V, hint), make(chan T, size). Для других типов make неприменим, а new универсален.

Длинный ответ

new

  • Выделяет zero-инициализированный объект

  • Возвращает *T

p := new(int) // *int = 0

make

  • Создаёт и инициализирует внутренние структуры

  • Возвращает значение типа:

    • make([]T, len, cap) → []T

    • make(map[K]V) → map[K]V

    • make(chan T, size) → chan T

Различия:

  • new не инициализирует сложные поля (len/cap, bucket), make — готовый к работе объект.

Пример:

m := new(map[string]int) // *map, но сам мап == nil, паника при записи
m2 := make(map[string]int) // готова к использованию

Вывод:

  • Используйте make для срезов, мап и каналов, new — редко, для указателей на простые типы.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#make

#new

#allocation

#initialize

#map

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.