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

  1. Básico sobre erro em Go

Em qualquer aplicação, é necessário o gerenciamento de erros para registro de log, exibição de mensagem amigável, por exemplo.

Ex 1:
"campo deve ser preenchido"
"valor inválido"

Em Go, assim como em outras linguagens, uma função nativa, ou função do usuário, pode retornar um valor de erro quando necessário ou nil, por exemplo.

Ex 2:
func nome_funcao(/*parametros*/) (retorno,error){

   if(/*condicao*/){
     return resultado,nil  //OK
   }

  return valor, nome_erro() //ERRO
}

Esse retorno deve ser validado para exibição de mensagem amigável ao usuário do programa:

if (erro != nil){ 
    //exibição de mensagem
}else{
    //OK
}

No exemplo mais simples para compreensão abaixo, vamos abrir um arquivo inexistente fazendo uso o método ReadFile, que pertence ao package os que irá retornar um erro que é capturado pela variável erro:

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

func main() {
    _, erro := os.ReadFile("arq.txt")

    if (erro != nil){ //validação
    fmt.Print("Erro:", erro)
    }else{
    fmt.Print("Ok")
    }
}
Saída
Erro:open arq.txt: no such file or directory

Go permite a criação de erros customizados, com e sem struct, e também a validação básica dos tipos de erro com os método errors.Is e errors.As.

Ex 4:
func MeuErro() error{
     return errors.New("minha mensagem de erro")
}
Ex 5:
   if(errors.Is(erro,ErroArgInvalido)){ //validação com erros.Is
        fmt.Print("ArgumentoInvalido")

Podemos também gerenciar erros com funções customizadas utilizando Defer, Panic e Recover além da possibilidade de logar erros utilizando o package log.

Esses assuntos mencionados serão discutidos nas próximas seções do tutorial Go.

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