Panic e Recover
A função panic vai interromper o fluxo normal do nosso programa e vai parar tudo, ela vai fazer a função “entrar em pânico” (termo usado no Go). Isso faz nossa função chamar todas as funções que tem defer, e caso a função não seja recuperada com o recover, o programa “morre”
Vamos supor que em nosso programa a média do aluno nunca possa ser exatamente “6”
package main
import "fmt"
func isAlunoAprovado(n1, n2 float32) bool { media := (n1 + n2) / 2
if media > 6 { return true } else if media < 6 { return false }
panic("A média é exatamente 6!!!")}
func main() { fmt.Println(isAlunoAprovado(6, 6)) fmt.Println("Pós execução!") // panic: A Média é exatamente 6!!! // ... exit status 2
}recover
Section titled “recover”Podemos recuperar um programa que está entrando em pânico usando a cláusula recover. Caso a função não esteja entrando em pânico, o valor de r será nil
package main
import "fmt"
func recuperarExecucao() { if r := recover(); r != nil { fmt.Println("Execução recuperada com sucesso!") }}
func isAlunoAprovado(n1, n2 float32) bool { media := (n1 + n2) / 2
if media > 6 { return true } else if media < 6 { return false }
panic("A MÉDIA É IGUAL A 6!")}
func main() { fmt.Println(isAlunoAprovado(6, 6)) fmt.Println("Pós execução!")}
// Execução recuperada com sucesso!// false// Pós execução!