Fonctions retournant des erreurs
Fait partie de la section Fondamentaux du Journey GO de Coddy — leçon 104 sur 109.
En Go, les fonctions retournent couramment une error comme dernière valeur de retour pour indiquer si quelque chose s'est mal passé.
Créez une fonction qui retourne à la fois un résultat et une erreur :
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Appelez la fonction et gérez l'erreur :
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}La sortie sera :
Error: cannot divide by zeroDéfi
DébutantDans ce défi, vous allez vous entraîner à créer une fonction qui renvoie une erreur lorsqu'une entrée invalide est fournie.
Vous devez compléter la fonction validateUsername qui vérifie si un nom d'utilisateur est valide. Un nom d'utilisateur est valide s'il contient au moins 3 caractères. Si le nom d'utilisateur est valide, retournez nil pour l'erreur. S'il est invalide, retournez une erreur avec un message approprié.
Le code pour appeler votre fonction et gérer l'erreur est déjà écrit pour vous.
Note : Ce défi utilise des variables prédéfinies au lieu de la saisie utilisateur.
Aide-mémoire
Les fonctions en Go retournent couramment une error comme dernière valeur de retour pour indiquer si quelque chose s'est mal passé.
Créez une fonction qui retourne à la fois un résultat et une erreur :
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Gérez l'erreur lors de l'appel de la fonction :
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Retournez nil lorsqu'il n'y a pas d'erreur, et utilisez errors.New() pour créer des messages d'erreur.
Essayez vous-même
package main
import (
"errors"
"fmt"
)
func validateUsername(username string) error {
// TODO : Vérifier si la longueur du nom d'utilisateur est inférieure à 3 caractères
// Si c'est le cas, retourner une erreur avec le message "username too short"
// Sinon, retourner nil (aucune erreur)
return nil
}
func main() {
// Tester avec un nom d'utilisateur valide
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)
}
// Tester avec un nom d'utilisateur invalide
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)
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs de comparaison et logiques
Opérateurs de comparaison - Partie 1Opérateurs de comparaison - Partie 2Opérateur logique ANDOpérateur logique OROpérateur logique NOTBases de la priorité des opérateursRécapitulatif - Effectuer des comparaisons7Structures de contrôle : Les boucles
Explication de la boucle `for`Boucle For - Les basesBoucle For - Condition uniquementLe mot-clé `break`Le mot-clé `continue`Boucles imbriquéesRécapitulatif - Répéter des actions2Variables et types de données de base
Qu'est-ce qu'une variableInférence de type avec `:=` Entiers (int)Nombres à virgule flottanteBooléensChaînes de caractères (Strings)Valeurs zéroConstantesConventions de nommageRécapitulatif - Variables et types5Entrées/Sorties de base
Sortie formatéeVerbes de formatageAffichage des typesSaisie utilisateur de baseRécapitulatif - Entrées et Sorties8Fonctions
Comprendre les fonctionsDéclarer une fonctionAppeler des fonctionsParamètres de fonctionRetourner une valeur uniqueRetourner plusieurs valeursValeurs de retour nomméesBases de la portée des fonctionsRécapitulatif - Créer du code réutilisable11Types composites : Slices
Introduction aux SlicesDéclaration de littéraux de SlicesCréation de Slices avec `make`Longueur vs Capacité des SlicesAccès aux éléments d'un SliceAjout d'élémentsDécoupage de Slices/Tableaux existantsItération sur les SlicesCopie de SlicesRécapitulatif - Listes dynamiques14Gestion de base des erreurs
Le concept d'erreurL'interface `error`Fonctions retournant des erreursVérification des erreursCréation d'erreurs simplesCréation d'erreurs formatéesGestion de base des erreursRécapitulatif - Gérer les problèmes3Opérateurs de base
Opérateurs arithmétiquesOpérateur de divisionL'opérateur moduloOpérateur d'affectationOpérateurs d'affectation augmentéeIncrémentation et décrémentationRécapitulatif - Calculs6Structure de contrôle : Les conditionnelles
L'instruction `if`Le mot-clé `else`Le mot-clé `else if`Masquage de variable dans `if`Initialisation des variablesL'instruction `switch``switch` avec expressions`switch` sans expressionLe mot-clé `fallthrough`Récapitulatif - Prendre des décisions9Pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de variables pointeursL'opérateur d'adresseDéréférencement de pointeursUtiliser des pointeurs dans les fonctionsPointeurs NilRécapitulatif - Comprendre les pointeurs12Types composites : Maps
Introduction aux MapsDéclaration de littéraux de MapCréation de Maps avec `make`Ajout et mise à jour de paires clé-valeurAccès aux valeurs d'une MapVérification de l'existence d'une cléSuppression d'entrées de MapTaille d'une MapItération sur les MapsRécapitulatif - Stockage clé-valeur