Sobes.tech
Middle

Como funciona a captura de pânico (panic/recover) em Go?

sobes.tech IA

Resposta da IA

Em Go, o mecanismo panic/recover é utilizado para lidar com situações excecionais.

  • panic provoca o encerramento abrupto da goroutine atual, iniciando o processo de "pânico", no qual a pilha de chamadas é desenrolada.
  • Durante o desenrolar da pilha, as funções diferidas (defer) são chamadas.
  • Se numa das funções diferidas for chamado recover(), é possível capturar o pânico e evitar que o programa termine.

recover() devolve o valor passado para panic(), se for chamado dentro de uma função diferida durante um pânico. Se chamado fora de uma função diferida ou na ausência de pânico, retornará nil.

Exemplo:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Pânico capturado:", r)
        }
    }()

    panic("algo correu mal")
}

Desta forma, panic inicia um erro, e recover permite tratá-lo e continuar a execução do programa.