В Go ключевое слово defer используется для откладывания выполнения функции до момента выхода из текущей функции. Очень полезный функционал, когда нужно освободить какие-то ресурсы (закрыть файл, канал, соединение с базой и т.д.) Пример Если в функции объявлено несколько defer, то они выполняются по принципу LIFO (last in, first out), последний пришёл, первый ушёл Так же нужно понимать, что аргументы для функции объявленой в defer будут вычисляться в момент определения. В общем, вот реальный пример использовать defer Так же defer может использоваться для обработки паники Когда компилятор встречает ключевое слово defer, он создаёт специальную структуру _defer расположенную в runtime/runtime2.go в структуре g. По-простому говоря, в горутине есть стек отложенных вызовов. g - это по факту внутреннее представление горутины в рантайме. Про структуру g подробней разберём в следующих статьях. Давайте разберём каждое поле. heap bool - флаг, указывающий, где хранится defer, в куче или на ст