Criando Erros Simples
Parte da seção Fundamentos do Journey de GO da Coddy — lição 106 de 109.
Em Go, você pode criar erros personalizados usando a função errors.New() da biblioteca padrão.
Importe o pacote errors:
import (
"errors"
"fmt"
)Crie um erro simples com uma mensagem:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}A saída será:
Error: cannot divide by zeroDesafio
InicianteNeste desafio, você praticará a criação de um erro simples em Go usando a função errors.New().
Você tem uma função que verifica se um nome de usuário é válido. Um nome de usuário é considerado válido se tiver pelo menos 5 caracteres. Sua tarefa é completar a função retornando um erro apropriado quando o nome de usuário for muito curto.
Folha de consulta
Crie erros personalizados usando errors.New() da biblioteca padrão:
import (
"errors"
"fmt"
)Retorne um erro de uma função:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Trate o erro:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Experimente você mesmo
package main
import (
"errors"
"fmt"
)
func main() {
// Testar com um nome de usuário válido
result, err := validateUsername("gopher123")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println(result)
}
// Testar com um nome de usuário inválido
result, err = validateUsername("go")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println(result)
}
}
func validateUsername(username string) (string, error) {
if len(username) < 5 {
// TODO: Retornar um erro com a mensagem "username must be at least 5 characters long"
// Dica: Use errors.New() para criar um novo erro
return "", nil // Substitua esta linha
}
return "Username is valid", nil
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores de Comparação e Lógicos
Operadores de Comparação - Parte 1Operadores de Comparação - Parte 2Operador Lógico ANDOperador Lógico OROperador Lógico NOTFundamentos de Precedência de OperadoresRecapitulação - Fazendo Comparações7Fluxo de Controle: Loops
O Loop `for` ExplicadoLoop For - BásicoLoop For - Apenas CondiçãoA Palavra-chave `break`A Palavra-chave `continue`Loops AninhadosRecapitulação - Repetindo Ações2Variáveis e Tipos de Dados Básicos
O que é uma variávelInferência de Tipo com `:=`Inteiros (int)Números de Ponto FlutuanteBooleanosStringsValores ZeroConstantesConvenções de NomenclaturaRecapitulação - Variáveis e Tipos5Entrada/Saída Básica
Saída FormatadaVerbos de FormataçãoImprimindo TiposObtendo Entrada Básica do UsuárioRecapitulação - Entrada e Saída8Funções
Entendendo FunçõesDeclarando uma FunçãoChamando FunçõesParâmetros de FunçãoRetornando um Único ValorRetornando Múltiplos ValoresValores de Retorno NomeadosFundamentos de Escopo de FunçãoRecapitulação - Criando Código Reutilizável11Tipos Compostos: Slices
Introdução aos SlicesDeclarando Literais de SliceCriando Slices com `make`Comprimento vs Capacidade de SlicesAcessando Elementos de SlicesAdicionando ElementosFatiando Slices/Arrays ExistentesIterando sobre SlicesCopiando SlicesRecapitulação - Listas Dinâmicas14Tratamento de Erros Básico
O Conceito de ErrosA Interface `error`Funções que Retornam ErrosVerificando ErrosCriando Erros SimplesCriando Erros FormatadosTratamento de Erros BásicoRecapitulação - Lidando com Problemas3Operadores Básicos
Operadores AritméticosOperador de DivisãoO Operador MóduloOperador de AtribuiçãoOperadores de Atribuição CompostaIncremento e DecrementoRecapitulação - Cálculos6Fluxo de Controle: Condicionais
A Instrução `if`A Palavra-chave `else`A Palavra-chave `else if`Sombreamento de Variáveis no `if`Inicializando VariáveisA Instrução `switch`Switch com ExpressõesSwitch sem ExpressãoA Palavra-chave `fallthrough`Recapitulação - Tomando Decisões