15 - Gestion-Erreurs-Golang
15 - Gestion-Erreurs-Golang
15 - Gestion-Erreurs-Golang
LANGAGE DE PROGRAMMATION GO
Présentation
Détection d'erreurs
Je vais volontairement sur cet exemple provoquer une erreur lors de l'exécution
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func division() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Entrez un chiffre : ")
scanner.Scan()
nbr, _ := strconv.Atoi(scanner.Text())
fmt.Println("Résultat :", 1000/nbr)
}
func main() {
division()
fmt.Println("Fin")
}
Erreur :
Sans aucune surprise nous obtenons une erreur qui nous explique qu'il est
expliquant à l'utilisateur qu'il n'est pas possible de diviser par 0 et qu'il doit rentrer
un nombre supérieur à 0.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
func division() {
for true {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Entrez un chiffre : ")
scanner.Scan()
nbr, _ := strconv.Atoi(scanner.Text())
if nbr <= 0 {
fmt.Println("[division par zéro impossible] Votre valeur doit être supérieur ou ég
} else {
fmt.Println("Résultat :", 1000/nbr)
break
}
}
func main() {
division()
fmt.Println("Fin")
}
Résultat :
C'est cool car on a résolu le problème de la division par zéro mais par contre lorsque
l'utilisateur rentre des caractères on lui affiche toujours le même message comme
quoi son entrée doit être supérieur à 0. Il serait plus judicieux de l'informer qu'il doit
Atoi() .
Déjà une chose est sûr l'erreur est levée lors de la fonction Atoi() , voyons voir un
On peut apprendre grâce au prototype que la fonction Atoi() retourne deux types
de valeurs :
un type error qui est l'erreur retourné par la fonction Atoi() qu'on peut
gérer
Donc pour gérer cette erreur de conversion il faut vérifier la valeur de retour de
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func division() {
for true {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Entre un chiffre : ")
scanner.Scan()
nbr, err := strconv.Atoi(scanner.Text())
if err != nil { // Gestion de l'erreur de la fonction Atoi()
fmt.Println("Vous devenez rentrer un nombre et non une chaîne de caractères !")
} else if nbr <= 0 {
fmt.Println("[division par zéro impossible] Votre valeur doit être supérieur ou ég
} else {
fmt.Println("Résultat :", 1000/nbr)
break
}
}
}
func main() {
division()
fmt.Println("Fin")
}
Entre un chiffre : -5
[division par zéro impossible] Votre valeur doit être supérieur ou égal à 0
Entre un chiffre : nope
Vous devenez rentrer un nombre et non une chaîne de caractères !
Entre un chiffre : 5
Résultat : 200
Fin
L'interface error
structure errors .
package main
import (
"errors"
"fmt"
"os"
)
func main() {
nbr := 0.0
if err != nil {
panic(err)
} else {
fmt.Println("Aucune erreur")
}
Résultat :
goroutine 1 [running]:
exit status 2
Information
Si votre fonction retourne une interface error alors vous ne pouvez retourner que
Ici j'utilise la fonction panic() pour quitter mon programme avec un code retour
programme s'est bien déroulée si il est différent de zéro cela indique un échec de
votre programme. C'est une valeur qui est retournée lors de la fin d'exécution de
votre programme.
echo $?
programme, car c'est possible que cette valeur soit récupérée et exploitée par une
autre personne qui utilise votre programme en tant que script pour vérifier si votre
Recommandation
possible de créer votre propre système de gestion d'erreur comme sur l'exemple ci-
dessous :
package main
import (
"fmt"
)
func main() {
nbr := 0.0
if err == false {
panic("Erreur: Il est impossible de diviser par 0 !")
} else {
fmt.Println("Aucune erreur")
}
}
afin de rendre votre code plus lisible et clair. Cela aide à la compréhension, à la