Sweetohm

Michel Casabianca


Suite à mes derniers postes sur la gestion des erreurs en Go (184 et 185), j’ai été jeter un coup d’œil au draft d’une proposition d’amélioration de la gestion des erreurs en Go.

Considérons cette fonction typique du Go (en ce qui concerne la gestion des erreurs) :

func printSum(a, b string) error {
	x, err := strconv.Atoi(a)
	if err != nil {
		return err
	}
	y, err := strconv.Atoi(b)
	if err != nil {
		return err
	}
	fmt.Println("result:", x + y)
	return nil
}

L’idée est d’utiliser les déclarations check et handle comme suit :

func printSum(a, b string) error {
	handle err { return err }
	x := check strconv.Atoi(a)
	y := check strconv.Atoi(b)
	fmt.Println("result:", x + y)
	return nil
}

handle déclare la manière de gérer le retour d’un appel de fonction renvoyant une erreur en dernière valeur de retour. check réalise un appel et si la dernière valeur de retour est une valeur non nulle, elle applique le gestionnaire déclaré avec handle.

Si en plus on ajoute que toute fonction a un gestionnaire d’erreur par défaut qui renvoie des valeurs nulles et l’erreur renvoyée par l’appel, on obtient le code suivant pour notre fonction :

func printSum(a, b string) error {
	x := check strconv.Atoi(a)
	y := check strconv.Atoi(b)
	fmt.Println("result:", x + y)
	return nil
}

Ce qui n’est pas mal du tout ! Vivement Go 2 :o)

Enjoy!