Tópicos importantes de Go
Go defer, panic and recover
Run cleanup code when a function returns, and turn a panic back into an ordinary error.
O que você vai aprender
- defer
- Deferred calls run in reverse
- recover
readConfig()
- 1
open fileruns first - 2
defer closescheduled - 3
read settingsruns second - 4
close fileruns on return
Cleanup that always runs
defer schedules a call to run when the surrounding function returns, which makes it the usual way to close files and release locks. A panic stops the normal flow, and recover, called in a deferred function, catches it.
close file prints after read settings because the deferred call runs when readConfig returns. Dividing by zero panics; the deferred function recovers and stores an error in the named result err. The three deferred calls in main run last, in reverse order.
Pontos-chave
- A deferred call runs when the function returns.
- Several defers run last in, first out.
- recover catches a panic inside a deferred function.
Exemplo executável de Go
main.go
package main
import "fmt"
func readConfig() {
fmt.Println("open file")
defer fmt.Println("close file") // runs when the function returns
fmt.Println("read settings")
}
func safeDivide(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("recovered: %v", r)
}
}()
return a / b, nil
}
func main() {
readConfig()
for i := 1; i <= 3; i++ {
defer fmt.Println("deferred", i) // last in, first out
}
fmt.Println(safeDivide(10, 2))
fmt.Println(safeDivide(1, 0))
}
open file
read settings
close file
5 <nil>
0 recovered: runtime error: integer divide by zero
deferred 3
deferred 2
deferred 1Pratique
Abra o exemplo no compilador online, mude um valor ou adicione uma linha e tente prever a saída antes de executar. Depois quebre o código de propósito e leia a mensagem do compilador.
Terminou esta lição?
Marque como aprendida para acompanhar seu progresso.
Seu progresso está salvo neste navegador Entre para mantê-lo em todos os dispositivos.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
Todos os desafios