В 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 соединения после полного прочтения тела ответа
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты