Что делает defer?

Junior
2.5k просмотров
AFK Offer AI

defer откладывает вызов функции до выхода из текущей функции. Аргументы вычисляются сразу при объявлении, но сам вызов происходит только при return или panic.

Несколько defer выполняются в обратном порядке — стек (LIFO). Последний defer выполнится первым.

Типичные кейсы — закрытие файлов, разблокировка мьютексов, закрытие соединений БД.

f, _ := os.Open("file.txt")
defer f.Close()

mu.Lock() defer mu.Unlock()

Важный нюанс: defer в цикле — плохая практика. Ресурсы не освобождаются до выхода из функции, и если цикл большой — всё накопится в памяти. Решение — вынести тело цикла в отдельную функцию.

Следующий вопрос

Что такое GMP модель планирования?