Funções que Retornam Erros
Parte da seção Fundamentos do Journey de GO da Coddy — lição 104 de 109.
Em Go, as funções comumente retornam um error como seu último valor de retorno para indicar se algo deu errado.
Crie uma função que retorne tanto um resultado quanto um erro:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Chame a função e trate o erro:
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 uma função que retorna um erro quando uma entrada inválida é fornecida.
Você precisa completar a função validateUsername que verifica se um nome de usuário é válido. Um nome de usuário é válido se tiver pelo menos 3 caracteres. Se o nome de usuário for válido, retorne nil para o erro. Se for inválido, retorne um erro com uma mensagem apropriada.
O código para chamar sua função e tratar o erro já está escrito para você.
Nota: Este desafio usa variáveis predefinidas em vez de entrada do usuário.
Folha de consulta
Funções em Go comumente retornam um error como seu último valor de retorno para indicar se algo deu errado.
Crie uma função que retorna tanto um resultado quanto um erro:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Trate o erro ao chamar a função:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Retorne nil quando não houver erro, e use errors.New() para criar mensagens de erro.
Experimente você mesmo
package main
import (
"errors"
"fmt"
)
func validateUsername(username string) error {
// TODO: Verifique se o comprimento do nome de usuário é inferior a 3 caracteres
// Se for, retorne um erro com a mensagem "username too short"
// Caso contrário, retorne nil (sem erro)
return nil
}
func main() {
// Testar com um nome de usuário válido
validName := "bob123"
err1 := validateUsername(validName)
if err1 != nil {
fmt.Printf("%s is invalid: %v\n", validName, err1)
} else {
fmt.Printf("%s is valid!\n", validName)
}
// Testar com um nome de usuário inválido
invalidName := "ab"
err2 := validateUsername(invalidName)
if err2 != nil {
fmt.Printf("%s is invalid: %v\n", invalidName, err2)
} else {
fmt.Printf("%s is valid!\n", invalidName)
}
}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