Sobes.tech
Junior — Middle

É possível capturar e tratar pânicos dentro de uma chamada defer em Go?

sobes.tech IA

Resposta da IA

Em Go, pode usar defer para lidar com pânicos, mas a chamada a defer em si não captura o pânico; é necessário capturá-lo dentro da função diferida usando recover().

Exemplo:

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

Aqui, recover() é chamado dentro da função diferida e permite capturar o pânico que ocorre em safeCall. Assim, não é possível "capturar" diretamente em defer, mas pode-se tratá-lo dentro da função diferida com recover().