Creación de errores con formato
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 107 de 109.
Creación de errores con formato... le permite incluir valores dinámicos en los mensajes de error.
La función fmt.Errorf() crea errores con cadenas con formato, de manera similar 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)
}
}La salida será:
Error: cannot divide 10 by zeroDesafío
PrincipianteEn este desafío, practicarás la creación de mensajes de error formateados utilizando la función fmt.Errorf. Tienes un programa que valida un nombre de usuario, y necesitas crear un mensaje de error adecuado cuando el nombre de usuario no es válido.
El programa tiene un nombre de usuario predefinido que es demasiado corto (menos de 5 caracteres). Tu tarea es crear un mensaje de error formateado que incluya el nombre de usuario no válido y la longitud mínima requerida.
Hoja de referencia
Utiliza fmt.Errorf() para crear mensajes de error formateados con 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
}Pruébalo tú mismo
package main
import (
"fmt"
)
func main() {
// Nombre de usuario predefinido que es demasiado corto
username := "bob"
// Longitud mínima requerida
minLength := 5
// Comprobar si el nombre de usuario es válido
if len(username) < minLength {
// TODO: Crear un error formateado usando fmt.Errorf que incluya:
// 1. El nombre de usuario no válido
// 2. La longitud mínima requerida
// Ejemplo de formato: "invalid username: [username] is too short, minimum length is [minLength]"
err := // Tu código aquí
// Imprimir el error
fmt.Println(err)
} else {
fmt.Println("Username is valid!")
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable11Tipos compuestos: Slices
Introducción a los SlicesDeclaración de literales de SliceCreación de Slices con `make`Longitud vs. Capacidad de un SliceAcceso a los elementos del SliceAñadir elementosSlicing de Slices/Arrays existentesIterar sobre SlicesCopiar SlicesResumen - Listas dinámicas14Manejo básico de errores
El concepto de erroresLa interfaz `error`Funciones que devuelven erroresComprobación de erroresCreación de errores simplesCreación de errores con formatoManejo básico de erroresResumen: Manejo de problemas3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisiones