defer
Возможность языка: отложить выполнение выражения до возврата из окружающей функции. Гарантирует очистку при любых ранних возвратах и паниках. Родом из Go (2009), есть также в Zig и Swift. Замена try-finally и RAII.
Классика Go: defer file.Close() сразу после file, _ := os.Open(...) — закрытие произойдёт всегда, даже при возврате с ошибкой посреди функции. Несколько defer выполняются в порядке LIFO (стек). Частая ловушка: defer file.Close() внутри цикла — закрытия копятся до выхода из функции, дескрипторы файлов утекают. Лечится внутренней функцией. Swift: defer { cleanup() } работает похоже. Zig: defer и errdefer (срабатывает только при возврате с ошибкой). Современный паттерн управления ресурсами — «try-finally из Java с синтаксическим сахаром».