Implementa distintas formas de gestión de errores y de recursos.
Un punto importante de la programación es saber cómo gestionar los errores y cerrar los recursos incluso cuando se producen errores.
Este ejercicio requiere que gestiones distintos tipos de errores. Como la gestión de errores depende bastante del lenguaje de programación, tendrás que consultar las pruebas de tu track para ver qué se necesita exactamente.
Si eres nuevo en los errores y los panics de Go, te recomendamos leer primero la documentación sobre estos temas para ponerlos en contexto.
En este ejercicio tendrás que definir una función Use(opener ResourceOpener, input string) error que abra un recurso, llame a Frob(input) sobre el recurso resultante y luego cierre ese recurso (en todos los casos).
Tu función debe gestionar correctamente los errores y los panics.
ResourceOpener opener será una función que puedes invocar directamente, opener(), para intentar «abrir» el recurso.
Devuelve un Resource y un valor de error al estilo idiomático de Go:
Consulta el fichero common.go para ver las definiciones de Resource, ResourceOpener, FrobError y TransientError.
Definirás tu solución en el mismo paquete que common.go y error_handling_test.go: «erratum».
Así esos tipos estarán disponibles para usarlos en tu solución.
Habrá algunos puntos en tu función Use en los que pueden producirse errores:
Al invocar la función ResourceOpener que se pasa a Use como primer parámetro, puede fallar con un error de tipo TransientError; en ese caso, sigue intentando abrir el recurso.
Si es otro tipo de error, devuélvelo desde tu función Use.
Al llamar a la función Frob sobre el Resource devuelto por la función ResourceOpener, puede entrar en panic con un FrobError (u otro tipo de error).
Si efectivamente es un FrobError, tendrás que llamar a la función Defrob del Resource usando la variable .defrobTag del FrobError del panic como entrada para la función Defrob.
En cualquier caso, Use debe devolver el error.
Nota también: si el Resource se abrió correctamente, asegúrate de llamar a su función Close exactamente una vez pase lo que pase (incluso si se han producido errores).
Para comprobar tipos de error concretos puedes usar las aserciones de tipo. Es posible que también te resulte útil consultar los valores devueltos con nombre para devolver información de errores desde la recuperación de un panic.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.