Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Зачем нужна конструкция defer?

Этот вопрос проверяет знание конструкции defer, используемой для отложенного выполнения кода.

Короткий ответ

defer позволяет отложить выполнение функции до завершения текущей функции. Это удобно для освобождения ресурсов, закрытия файлов или завершения транзакций.

Длинный ответ

defer используется для обеспечения выполнения операций, которые должны произойти в любом случае, даже если функция завершится с ошибкой. Например, закрытие файла или разблокировка ресурса.

Пример:

package main

import (
	"fmt"
	"os"
)

func main() {
	file, err := os.Open("example.txt")
	if err != nil {
		fmt.Println("Ошибка:", err)
		return
	}
	defer file.Close() // Закрытие файла после выполнения функции

	fmt.Println("Файл успешно открыт")
}

 

Особенности:

- Вызываемые функции defer выполняются в обратном порядке их объявления (LIFO).

- Отложенные функции исполняются даже при панике.

 

Пример использования нескольких defer:

package main

import "fmt"

func main() {
	defer fmt.Println("Завершение 1")
	defer fmt.Println("Завершение 2")
	fmt.Println("Работа программы")
}

Вывод:

Работа программы
Завершение 2
Завершение 1

 

В каких случаях использовать:

- Для освобождения системных ресурсов (файлы, соединения).

- Для отмены блокировок.

- Для логирования завершения работы функции.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Golang

Ключевые слова

#defer

#lifo

#cleanup

Подпишись на Golang Developer в телеграм