Implementa diverse forme di gestione degli errori e delle risorse.
Un punto importante della programmazione è come gestire gli errori e chiudere le risorse anche quando si verificano degli errori.
Questo esercizio ti chiede di gestire vari errori. Dato che la gestione degli errori dipende parecchio dal linguaggio di programmazione, dovrai consultare i test del tuo track per vedere esattamente cosa è richiesto.
Se non hai familiarità con gli errori o i panic di Go, ti consigliamo di leggere prima la documentazione su questi argomenti per avere il contesto.
In questo esercizio ti verrà chiesto di definire una funzione Use(opener ResourceOpener, input string) error che apre una risorsa, chiama Frob(input) sulla risorsa risultante e poi la chiude (in tutti i casi).
La funzione dovrà gestire correttamente errori e panic.
ResourceOpener opener sarà una funzione che potrai chiamare direttamente con opener() nel tentativo di «aprire» la risorsa.
Restituisce un Resource e un valore di errore nel modo idiomatico di Go:
Consulta il file common.go per le definizioni di Resource, ResourceOpener, FrobError e TransientError.
Definirai la soluzione nello stesso package di common.go e error_handling_test.go: "erratum".
In questo modo quei tipi saranno disponibili per l'uso nella soluzione.
Ci saranno alcuni punti nella funzione Use in cui potrebbero verificarsi errori:
Quando chiami la funzione ResourceOpener passata a Use come primo parametro, potrebbe fallire con un errore di tipo TransientError; in tal caso continua a provare ad aprire la risorsa.
Se si tratta di un altro tipo di errore, restituiscilo dalla funzione Use.
Chiamando la funzione Frob sulla Resource restituita dalla funzione ResourceOpener, si potrebbe verificare un panic con un FrobError (o un altro tipo di errore).
Se si tratta davvero di un FrobError, dovrai chiamare la funzione Defrob della risorsa usando la variabile .defrobTag del FrobError del panic come input per la funzione Defrob.
In ogni caso Use deve restituire l'errore.
Nota anche: se la Resource è stata aperta con successo, assicurati di chiamare la sua funzione Close esattamente una volta, qualunque cosa accada (anche se si sono verificati errori).
Per verificare tipi di errore specifici si possono usare le asserzioni di tipo. Potresti anche aver bisogno di dare un'occhiata ai valori restituiti con nome come modo utile per restituire informazioni sull'errore dal recupero del panic.
Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.