Sobes.tech
Junior — Middle

Como é que a sua aplicação gere exceções e erros?

sobes.tech IA

Resposta da IA

No Go, a gestão de erros difere de muitas outras linguagens, pois aqui não há exceções no sentido habitual. Em vez disso, as funções normalmente retornam um valor de erro (error) como segundo resultado.

Abordagens principais:

  • Verificação de erro após chamar uma função:

    result, err := someFunction()
    if err != nil {
        // tratamento de erro
        log.Println("Erro:", err)
        return err
    }
    // continuar com o resultado
    
  • Criação de tipos de erro próprios usando errors.New ou fmt.Errorf para mensagens mais informativas.

  • Pânicos (panic) e recuperação (recover) são usados raramente, principalmente para erros críticos que não devem ocorrer no fluxo normal.

  • Registro de erros e devolvê-los para cima na pilha para um tratamento centralizado.

Exemplo de tratamento de erro:

package main

import (
    "errors"
    "fmt"
)

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("divisão por zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Erro:", err)
        return
    }
    fmt.Println("Resultado:", result)
}

Dessa forma, em Go, os erros são tratados explicitamente, o que aumenta a legibilidade e a confiabilidade do código.