Задать вопрос
@shushara4241

Почему может быть утечка памяти?

IDE подсвечивает как возможную утечку памяти эту конструкцию. Это ошибочное предупреждение или есть какая-то ошибка?

type ShutdownFunc func() error

for _, shutdown := range app.onShutdown {
	defer func(shutdown ShutdownFunc) {
		if err := shutdown(); err != nil {
			log.Println(err)
		}
	}(shutdown)
}
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@falconandy
Используете GoLand? Он подсказывает:
Possible resource leak, 'defer' is called in the 'for' loop.

A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function returns, either because the surrounding function executed a return statement , reached the end of its function body , or because the corresponding goroutine is panicking .

Предупреждение говорит о том, что defer код будет выполнен только при завершении функции, а не итерации цикла. В вашем случае это предупреждение неактуально, но проще немного переписать код, чтобы не было "ругани":

func (app App) Shutdown() {
	for _, shutdown := range app.onShutdown {
		if err := shutdown(); err != nil {
			log.Println(err)
		}
	}
}
...
defer app.Shutdown()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы