| Go possibilita recuperar, ou recover de um panic,
utilizando a função nativa recover. Orecoverpode interromper umpanicde abortar a execução
de um determinado código e prosseguir normalmente. |  | 
        
        
          | Um exemplo em que isto pode ser útil: um servidor
não deveria quebrar se uma conexão com um cliente causa
um erro crítico. Ao invés disso, o mais apropriado seria
fechar a conexão e continuar servindo outros clientes.
Na verdade, isso é o que o pacote net/httpnativo de Go,
faz por padrão para servidores HTTP. |  | 
        
        
          |  |    package main
 | 
        
        
          |  | import "fmt"
 | 
        
        
          | Esta função gera um panic. | 
func mayPanic() {
    panic("uhhh... Houston?")
}
 | 
        
        
          | recoverdeve ser chamado dentro de uma função deferida.
Quando uma função gerar panico, o defer será ativado e a
função recover será chamada para capturar o panic.
 | func main() {
 | 
        
        
          | O valor retornado pela função recoveré o erro gerado na chamada dopanic. |     defer func() {
        if r := recover(); r != nil {
 | 
        
        
          |  |             fmt.Println("Recovered. Error:\n", r)
        }
    }()
 | 
        
        
          |  |     mayPanic()
 | 
        
        
          | Este código não será executado, porque mayPanicgera panico. A execução de main é interrompida
no momento do pânico e é resumida no fechamento
deferido. | 
    fmt.Println("After mayPanic()")
}
 |