Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Função panic
  2. Função recover
  3. Função Exit

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.

Quando usamos a função panic, interrompemos imediatamente nosso programa como visto nos exemplos acima. Porém, em algumas situações, precisamos realizar algumas tarefas antes do encerramento. Nessa situação, Go fornece a função recover.

Sintaxe
recover();
Ex 3:
package main
import "fmt"

func main() {

  fmt.Println("Olá mundo")
  panic ("Pânico!!")
  fmt.Println("Você não verá isso")
}
Saída
Erro:open arq.txt: no such file or directory

Tendo conhecimento da função panic, podemos declarar nossas validações e encerrar nossos programas de acordo com argumentos aguardados.

Ex 4:
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.

Com a função Exit, podemos encerrar nosso programa retornando um código de encerramento para o S.O. Quando essa função é utilizada, funções que utilizam defer não são executadas.

Sintaxe
func Exit(code int)

Para o uso dessa função, precisamos importar o package os no topo de nosso arquivo main como na sintaxe abaixo:

Sintaxe
package main
import "so"

Quando passamos um argumento para a função, o valor 0 indica sucesso e um valor diferente de zero significa fracasso.

Ex 5:
package main
import "fmt"
import "os"

func funcao() {
   fmt.Println("defer executado");
}

func main() {
  defer funcao();
  fmt.Println("Olá mundo!");
//validações
  os.Exit(1)
}
Saída
Olá mundo!
exit status 1

Use a funçâo Exit com cuidado para evitar que recursos fiquem alocados em memória ao encerrar seu programa de forma abrupta.

  1. 07/04/2025 - versão inicial