defer
Recurso de linguagem que adia a execução de uma expressão até o fim da função, garantindo a limpeza mesmo com retorno antecipado ou pânico.
Criado no Go (2009); Zig e Swift também o têm. Substitui o try-finally e, em parte, o RAII. O clássico: defer file.Close() logo depois de file, _ := os.Open(...) — o fechamento acontece sempre, mesmo que a função retorne com erro no meio do caminho. Vários defer rodam em ordem LIFO (como uma pilha). A armadilha comum é usar defer file.Close() dentro de um laço: os fechamentos só acontecem no fim da função e os descritores vazam; a saída é isolar o corpo do laço em uma função interna. No Swift, defer { cleanup() } funciona de forma parecida; no Zig existe ainda o errdefer, que só executa quando a função retorna com erro. Na prática, pense nele como o try-finally do Java com açúcar sintático.