В Go есть полезная конструкция defer
, которая позволяет выполнять функции в фазе выхода из текущей функции. Например:
package main
import (
"fmt"
)
func main() {
// функция выполнится в самом конце при выходе из main
defer fmt.Println("finish")
fmt.Println("start")
}
Вывод:
start
finish
Такие функции называются отложенными. Каждая такая функция добавляется в стек отложенных функций и будет выполнена в порядке LIFO (Last In First Out):
package main
import (
"fmt"
)
func main() {
defer fmt.Println("3rd")
defer fmt.Println("2nd")
fmt.Println("1st")
}
Вывод:
1st
2nd
3rd
Использование отложенных функций достаточно распространено.
Например:
- закрытие дескриптора файла после работы
- возвращение соединения с базой данных в общий пул после чтения всех строк
- закрытие TCP соединения после полного прочтения тела ответа

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты