Implementa distintos tipos de manejo de errores y de gestión de recursos.
Un punto importante de la programación es cómo manejar los errores y cerrar los recursos incluso si se producen errores.
Este ejercicio requiere que manejes varios errores. Como el manejo de errores es bastante específico de cada lenguaje de programación, tendrás que consultar los tests de tu track para ver exactamente qué se requiere.
Si es la primera vez que ves errores o pánicos en Go, te recomendamos leer primero la documentación sobre estos temas para tener 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 después cierre ese recurso (en todos los casos).
Tu función debe manejar correctamente los errores y los pánicos.
ResourceOpener opener será una función que puedes invocar directamente, opener(), en un intento de «abrir» el recurso.
Devuelve un Resource y un valor de error al estilo idiomático de Go:
Consulta el archivo common.go para ver las definiciones de Resource, ResourceOpener, FrobError y TransientError.
Tu solución tendrá que estar en el mismo paquete que common.go y error_handling_test.go: «erratum».
Esto hará que esos tipos estén disponibles para usarlos en tu solución.
Habrá algunos lugares en tu función Use donde pueden ocurrir errores:
Al invocar la función ResourceOpener que se pasa a Use como primer parámetro, puede fallar con un error de tipo TransientError; si eso ocurre, 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 que devuelve la función ResourceOpener, puede entrar en pánico con un FrobError (u otro tipo de error).
Si en efecto es un FrobError, tendrás que llamar a la función Defrob del Resource usando la variable .defrobTag del FrobError del pánico como entrada para la función Defrob.
En cualquier caso, Use debe devolver el error.
Ten en cuenta 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 han ocurrido errores).
Las comprobaciones de tipos de error específicos se pueden hacer con aserciones de tipo. También puede que necesites consultar los valores de retorno con nombre como una forma útil de devolver información de errores durante la recuperación de un pánico.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.