Setze verschiedene Arten der Fehlerbehandlung und des Ressourcenmanagements um.
Ein wichtiger Punkt beim Programmieren ist, wie man Fehler behandelt und Ressourcen schließt, auch wenn Fehler auftreten.
Bei dieser Übung geht es darum, verschiedene Fehler zu behandeln. Da die Fehlerbehandlung stark von der Programmiersprache abhängt, musst du in den Tests deines Tracks nachschauen, um zu sehen, was genau verlangt wird.
Wenn du neu bei Go-Fehlern oder Panics bist, empfehlen wir dir, zuerst die Dokumentation zu diesen Themen zu lesen, um den Kontext zu verstehen.
In dieser Übung sollst du eine Funktion Use(opener ResourceOpener, input string) error definieren, die eine Ressource öffnet, Frob(input) auf der zurückgegebenen Ressource aufruft und diese Ressource anschließend schließt (in allen Fällen).
Deine Funktion sollte Fehler und Panics korrekt behandeln.
ResourceOpener opener ist eine Funktion, die du direkt mit opener() aufrufen kannst, um zu versuchen, die Ressource zu „öffnen“.
Sie gibt einen Resource- und einen Fehlerwert auf idiomatische Go-Art und Weise zurück:
Die Definitionen von Resource, ResourceOpener, FrobError und TransientError findest du in der Datei common.go.
Deine Lösung definierst du im selben Paket wie common.go und error_handling_test.go: „erratum“.
Dadurch stehen diese Typen in deiner Lösung zur Verfügung.
In deiner Use-Funktion gibt es ein paar Stellen, an denen Fehler auftreten können:
Wenn du die Funktion ResourceOpener aufrufst, die als erster Parameter an Use übergeben wurde, kann sie mit einem Fehler vom Typ TransientError fehlschlagen. In diesem Fall versuche weiter, die Ressource zu öffnen.
Handelt es sich um eine andere Art von Fehler, gib ihn aus deiner Use-Funktion zurück.
Wenn du die Funktion Frob auf der Resource aufrufst, die die Funktion ResourceOpener zurückgegeben hat, kann sie einen Panic mit einem FrobError auslösen (oder mit einer anderen Art von Fehler).
Handelt es sich tatsächlich um einen FrobError, musst du die Defrob-Funktion der Ressource aufrufen, indem du die Variable .defrobTag des FrobError aus dem Panic als Eingabe für die Defrob-Funktion verwendest.
In beiden Fällen sollte Use den Fehler zurückgeben.
Außerdem: Wenn die Resource erfolgreich geöffnet wurde, stelle sicher, dass du ihre Close-Funktion genau einmal aufrufst, egal was passiert (auch wenn Fehler aufgetreten sind).
Das Testen auf bestimmte Fehlertypen kannst du mit Typzusicherungen durchführen. Außerdem kann es hilfreich sein, dir benannte Rückgabewerte anzusehen, um Fehlerinformationen aus der Wiederherstellung nach einem Panic zurückzugeben.
Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.