Go · Essencial · Inglês · Técnico
defer
Palavra-chave que agenda uma chamada de função para executar quando a função atual terminar, em ordem inversa de declaração (LIFO).
Onde usar
É o jeito de garantir limpeza: 'defer f.Close()' logo depois de abrir o arquivo e 'defer mu.Unlock()' depois do Lock. Roda mesmo se houver panic.
Em código
func main() {
defer fmt.Println("1")
defer fmt.Println("2")
fmt.Println("fim")
} // imprime: fim, 2, 1Exemplos
Put a defer right after opening the file.
Coloque um defer logo depois de abrir o arquivo.
Deferred calls run in reverse order.
Chamadas adiadas rodam em ordem inversa.
Cuidado
Os argumentos são avaliados na hora do defer, não quando ele executa; e dentro de loops os defers só rodam ao fim da função.
Sinônimos
chamada adiada
Origem
Do latim deferre, 'levar adiante', e do inglês defer, 'adiar'.