Sobes.tech
Back to questions
Middle
104
questionbank

Что такое оператор defer в языке Go?

Sobes Copilot

Get answers in real time

Answer from AI

sobes.tech AI

Оператор defer используется для отложенного выполнения функции или метода. Функции, помеченные defer, выполняются непосредственно перед выходом из содержащей их функции.

Принципы работы defer:

  • Выполняется при выходе из текущей функции, будь то нормальное выполнение или паника.
  • Несколько defer в одной функции выполняются в порядке LIFO (Last-In, First-Out).
  • Полезен для очистки ресурсов, таких как закрытие файлов или сетевых соединений.

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

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("Открываем файл.")

	file, err := os.Open("example.txt")
	if err != nil {
		// Обработка ошибки
		return
	}

	// Отложенное закрытие файла
	defer file.Close()
	defer fmt.Println("Файл будет закрыт.") // Этот defer выполнится первым (LIFO)

	fmt.Println("Обрабатываем файл...")

	// Дальнейшая работа с файлом
}

Вывод программы:

Открываем файл.
Обрабатываем файл...
Файл будет закрыт.