Criando Erros Formatados
Parte da seção Fundamentos do Journey de GO da Coddy — lição 107 de 109.
Criar Erros Formatados... permite incluir valores dinâmicos em mensagens de erro.
A função fmt.Errorf() cria erros com strings formatadas, de forma semelhante a fmt.Printf():
import (
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide %d by zero", a)
}
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 10 by zeroDesafio
InicianteNeste desafio, você praticará a criação de mensagens de erro formatadas usando a função fmt.Errorf. Você tem um programa que valida um nome de usuário e precisa criar uma mensagem de erro adequada quando o nome de usuário for inválido.
O programa possui um nome de usuário predefinido que é curto demais (menos de 5 caracteres). Sua tarefa é criar uma mensagem de erro formatada que inclua o nome de usuário inválido e o comprimento mínimo exigido.
Folha de consulta
Use fmt.Errorf() para criar mensagens de erro formatadas com valores dinâmicos:
import "fmt"
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide %d by zero", a)
}
return a / b, nil
}Experimente você mesmo
package main
import (
"fmt"
)
func main() {
// Nome de usuário predefinido que é curto demais
username := "bob"
// Comprimento mínimo exigido
minLength := 5
// Verifica se o nome de usuário é válido
if len(username) < minLength {
// TODO: Crie um erro formatado usando fmt.Errorf que inclua:
// 1. O nome de usuário inválido
// 2. O comprimento mínimo exigido
// Exemplo de formato: "invalid username: [username] is too short, minimum length is [minLength]"
err := // Seu código aqui
// Imprime o erro
fmt.Println(err)
} else {
fmt.Println("Username is valid!")
}
}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