Implémente différentes formes de gestion des erreurs et des ressources.
Un aspect important de la programmation consiste à gérer les erreurs et à fermer les ressources même lorsque des erreurs se produisent.
Cet exercice te demande de gérer différents types d'erreurs. Comme la gestion des erreurs est plutôt spécifique au langage de programmation, tu devras consulter les tests de ton parcours pour voir ce qui est exactement attendu.
Si tu débutes avec les erreurs et les panics en Go, on te conseille de commencer par lire la documentation sur ces sujets pour te mettre dans le contexte.
Dans cet exercice, tu dois définir une fonction Use(opener ResourceOpener, input string) error qui ouvre une ressource, appelle Frob(input) sur la ressource obtenue, puis ferme cette ressource (dans tous les cas).
Ta fonction doit gérer correctement les erreurs et les panics.
ResourceOpener opener sera une fonction que tu peux appeler directement, opener(), pour tenter d'« ouvrir » la ressource.
Elle renvoie une Resource et une valeur d'erreur, selon la façon idiomatique de faire en Go :
Consulte le fichier common.go pour les définitions de Resource, ResourceOpener, FrobError et TransientError.
Tu définiras ta solution dans le même paquet que common.go et error_handling_test.go : « erratum ».
Ces types seront ainsi disponibles dans ta solution.
Dans ta fonction Use, il y aura quelques endroits où des erreurs peuvent survenir :
Quand tu appelles la fonction ResourceOpener passée en premier paramètre à Use, elle peut échouer avec une erreur de type TransientError ; dans ce cas, continue d'essayer d'ouvrir la ressource.
S'il s'agit d'une autre sorte d'erreur, renvoie-la depuis ta fonction Use.
Quand tu appelles la fonction Frob sur la Resource renvoyée par la fonction ResourceOpener, elle peut panic avec une FrobError (ou un autre type d'erreur).
S'il s'agit bien d'une FrobError, tu devras appeler la fonction Defrob de la ressource en utilisant la variable .defrobTag de la FrobError du panic comme entrée de la fonction Defrob.
Dans un cas comme dans l'autre, Use doit renvoyer l'erreur.
À noter aussi : si la Resource a bien été ouverte, assure-toi d'appeler sa fonction Close exactement une fois, quoi qu'il arrive (même si des erreurs se sont produites).
Pour tester des types d'erreur spécifiques, tu peux utiliser des assertions de type. Tu auras peut-être aussi besoin de regarder du côté des valeurs de retour nommées, un moyen pratique de renvoyer des informations d'erreur lors de la récupération après un panic.
Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.