Menu
Coddy logo textTech

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 zero
challenge icon

Desafio

Iniciante

Neste 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)
	}
}
quiz iconTeste seus conhecimentos

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