Skip to main content

Gestion d'erreurs

Gestion d'erreurs dans les langages

Il y a plusieurs stratégies possibles :

  • Code d'Erreurs
  • Exceptions
  • Pattern Matching
  • ...

Go et le retour multiple

En Go, nous allons exploiter le retour multiple des fonctions pour gérer nos erreurs

Exemple classique

func MyFunc() (int, error) {
	// code
	return 1
}

func main() {
	v, err := MyFunc()

	if err != nil {
		fmt.Printf("Error in MyFunc: %v", err)
	}
}

nil = NULL

Gestion d'erreur standard en Go

En Go, on peut retrouver souvent des codes qui auront cette forme-là pour gérer les erreurs

v1, err := MyFunc1()
if err != nil {
	return err
}

v2, err := MyFunc2()
	if err != nil {
return err
}

v3, err := MyFunc3()
	if err != nil {
return err
}

v4, err := MyFunc4()
	if err != nil {
return err
}

C'est un peu répétitif... Mais efficace ! Cela apporte une lecture du code progressivement.

Early return

En Go, on va favoriser les tests et retour d'erreurs en tout début de fonction, pour faire un retour d'erreur le plus rapidement possiblepossible, permettre à notre code qui suit de grandir plus facilement.

Code non-early return

func MyFunc(condition bool) (int, err) {
	if (condition) {
		if (!condition2) {
			return 0, errors.New("Error 2!")
		}
		// code
		return 42, nil
	}
	return 0, errors.New("Error!")
}

Code early-return

func MyFunc(condition bool) (int, err) {
	if (!condition) {
		return 0, errors.New("Error!")
	}
	if (!condition2) {
		return 0, errors.New("Error 2!")
	}
	// code
	return 42, nil
}