O tratamento de erros é uma das operações frequentes no ciclo de desenvolvimento de software. É um aspecto crucial de uma boa programação. O Go adota uma abordagem simples e fácil de usar com seu mecanismo integrado para tratamento de erros. Baseia-se no retorno de erros de funções e métodos, permitindo que você se concentre na funcionalidade do código que é intuitiva e fácil de ler.
Você lida com erros em Go explicitamente, o que resulta em uma estrutura sólida para feedback, com a capacidade de implementar a lógica de repetição de forma consistente. O erros pacote fornece funcionalidade adicional para tratamento de erros.
O pacote de erros
O pacote de erros é um dos pacotes da biblioteca padrão do Go. O pacote fornece primitivas simples de tratamento de erros e funcionalidades para criar e manipular erros de forma consistente no código Go.
O pacote fornece o Novo função para criar erros com mensagens de erro personalizadas que você pode usar da mesma forma que qualquer tipo de erro interno, como o nada e Erro método do erro interface.
O erros O pacote também fornece funcionalidade para empacotar e desempacotar erros, um método para asserções de tipo em erros.
Você pode importar o erros pacote com a palavra-chave import. Basta especificar o nome do pacote em sua lista de importações.
importar"erros"
Capturando e tratando erros em Go
O conhecimento do tratamento básico de erros em Go estabelece a base para a compreensão do erros pacote. Funções e métodos retornam erros acompanhados por um recurso.
Aqui está um exemplo de tratamento de erros de uma operação de abertura de arquivo com o built-in os pacote.
pacote principal
importar (
"fmt"
"os"
)funçãoprincipal() {
arquivo, erro := os. Abrir("nome do arquivo.txt")se erro != nada {
fmt. Println (err)
}
// ...
}
O Abrir método do os pacote é útil quando trabalhando com arquivos de texto em Go. Ele abre um arquivo, retornando uma instância de arquivo aberto e um erro.
O valor do erro pode ser o nada tipo, indicando nenhum erro. No entanto, você pode verificar um caso diferente de nulo e lidar com um erro, se estiver presente. No caso acima, o bloco if imprime o erro.
Você pode acessar o Erro método de um erro para extrair mais informações sobre o erro (geralmente uma descrição).
se erro != nada {
fmt. Println (err. Erro())
}
Por exemplo, se o arquivo não existir, você verá uma mensagem de erro semelhante a esta:
Criando erros em Go
Você pode criar erros com o Novo método do erros pacote. Este método recebe uma mensagem de string e retorna os erros encontrados.
importar"erros"
funçãoprincipal() {
err := erros. Novo("algo deu errado")
se erro != nada {
// código de tratamento de erro vai aqui
}
}
O principal função cria um novo erro e manipula possíveis erros da criação do erro com um se declaração.
Você também pode definir erros personalizados em Go. O método convencional usa um struct e uma função de erro para implementar o struct com base na funcionalidade do erro.
pacote principal
importar"fmt"
tipo customError estrutura {
informação corda
}funçãoprincipal() {
// exemplo de instanciação da struct
erro := customError{
informações: "Algo deu errado!",
}
// imprime a instância da struct
fmt. Println (err)
}
O customError struct é o projeto do erro, e o informação campo string conterá a mensagem de erro.
Suas funções de erro podem implementar o customError struct e retornar uma string de erro.
função(ce customError)Erro()corda {
retornar fmt. Sprintf("Ocorreu um erro personalizado: %v", ce.info)
}
O Erro método do customError struct retorna uma string usando o método de formatação Sprintf do pacote fmt.
Erros de empacotamento e desempacotamento em Go
Você pode adicionar mais informações contextuais aos erros agrupando-os. Você usará principalmente erros encapsulados para criar mensagens de erro claras para precisão na depuração.
Você pode usar o Errof método do fmt pacote que fornece funcionalidade para formatar mensagens de erro para agrupar erros. O Errof O método aceita uma string e um verbo de formatação de string e o erro e retorna o erro agrupado.
importar (
"fmt"
"os"
)funçãoprincipal() {
_, err := os. Abrir("nome do arquivo.txt")
se erro != nada {
wrapErr := fmt. Errof("Erro ao abrir arquivo: %v", erro)
fmt. Println (wrappedErr)
}
}
O principal função abre um arquivo com o os pacote de Abrir método e envolve o erro com o método Errorf do fmt pacote. Em seguida, ele gera o erro agrupado no console.
Você pode desempacotar erros agrupados em seus programas com o Desembrulhar método do erros pacote. O Desembrulhar O método aceita o erro encapsulado e retorna o erro não encapsulado.
importar (
"fmt"
"os"
"erros"
)funçãoprincipal() {
_, err := os. Abrir("nome do arquivo.txt")
se erro != nada {
wrapErr := fmt. Errof("Erro ao abrir arquivo: %v", erro)
unwrappedErr := erros. Unwrap (wrappedErr)
fmt. Println (unwrappedErr)
}
}
O principal A função agrupa um erro de uma operação de abertura de arquivo e o unwrappedErr variável contém o erro desempacotado.
Registre seus relatórios de erro com esses pacotes de registro de terceiros
Você precisará registrar alguns erros para revisões posteriores, depuração e outras operações durante o processo de desenvolvimento de seu aplicativo. Você pode usar o zap pacote por pacotes Uber, Logrus, Zerolog e Log15 para registro rápido e estruturado.