Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: defer, memory, performance

Почему в Go не рекомендуется делать defer внутри больших циклов?

Проверяет понимание работы defer, управления памятью и влияния на производительность.

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

defer внутри цикла накапливает отложенные вызовы и выполняет их только при выходе из функции. В больших циклах это приводит к росту памяти и задержке освобождения ресурсов.

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

defer в Go добавляет функцию в стек отложенных вызовов, который выполняется только при возврате из текущей функции, а не при завершении итерации цикла.

Если написать так:

for i := 0; i < 100000; i++ {
		defer f.Close()
}

произойдёт следующее:

  • все 100 000 defer будут сохранены в памяти;

  • f.Close() выполнится один раз - в самом конце функции;

  • ресурсы (файлы, соединения) будут удерживаться слишком долго.

Почему это плохо:

  1. Рост памяти - каждый defer хранит ссылку и аргументы.

  2. Задержка освобождения ресурсов — файлы, mutex, соединения.

  3. Падение производительности — особенно в горячих путях.

Как правильно:

  • выносить defer в отдельную функцию;

  • или вызывать Close() явно в конце итерации.

for _, f := range files {
		func() {
				defer f.Close()
				process(f)
		}()
}

Вывод: defer внутри больших циклов — частая причина скрытых проблем с памятью и ресурсами.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

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

#defer

#memory

#performance

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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