Ключевое слово defer в Go откладывает выполнение функции до того момента, когда вернётся охватывающая её функция. Это полезно для операций очистки и управления ресурсами.
Отложенные функции выполняются в порядке LIFO (Last In, First Out), то есть последний отложенный оператор выполнится первым. Это гарантирует правильную последовательность очистки.
defer fmt.Println("world")
defer fmt.Println("hi")
fmt.Println("hello")
// Output:
// hello
// hi
// world
defer с recover() для обработки ошибокdefer складываются в стек и выполняются в обратном порядкеfunc readFile(filename string) {
file, _ := os.Open(filename)
defer file.Close() // Выполнится когда readFile вернётся
// Работай с файлом здесь
}
Это гарантирует, что файл всегда закроется и не будет утечки ресурсов.
Когда в функции присутствует несколько defer инструкций, они выполняются в порядке LIFO, то есть самая недавно отложенная функция выполняется первой.
Новый — ещё не проверен сообществом
Вы