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 possible, 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
}