Quando precisamos encerrar nossos programas em Go de forma abrupta, podemos utilizar a
função panic. Quando essa função é invocada, a execução do programa é interrompido
e finalizado. Qualquer trecho de código posterior à chamada da função não é executado.
Sintaxe
panic(string)
A função recover verifica se um panic ocorreu, captura a informação utilizada no panic, evitando
o término do programa permitindo que alguma lógica seja executada.
Sintaxe
nome_variavel := recover();
Para utilizarmos recover, precisamos fazer uso defer para invocar uma função ou bloco de
código ao término de nosso programa:
Sintaxe
defer nome_funcao()
Ex 1:
package main
import "fmt"
func RecoverPanico() {
rec := recover()
if rec != nil{
fmt.Println("recover:", rec)
fmt.Println("Ok, sem pânico");
//sua lógica aqui
}
}
func main() {
defer RecoverPanico();
fmt.Println("Olá mundo!");
panic("pânico na main!")
}
Saída
Olá mundo!
recover: pânico na main!
Ok, sem pânico
Tendo conhecimento da função panic, podemos declarar nossas validações e encerrar nossos programas de acordo
com argumentos aguardados.
Ex 2:
package main
import "fmt"
func main() {
a,b := 10,0
if(b == 0){
panic("divisão por zero");
}else{
fmt.Print(a/b);
}
}
Saída
panic: divisão por zero
Como boa prática, não utilize o panic para validações básicas como entrada de dados do usuário
cujo erro é esperado. Nesses casos, use valores de retorno de erro para tratamento.