Bueno y nos toca ahora el capítulo de las excepciones.
El manejo de errores llegamos al mundo del diferirá Panic y el Recover y vamos a explicar cada una de
estas tres instrucciones que nos da Go para manejar el tema de las excepciones y errores en Golan.
A diferencia de otros lenguajes aquí no hay un troica catch ni un exception ni nada que tenga que ver
con el mundo dejaba de punto net ni demás.
Vamos a ver vamos a crear primero vamos en orden nos vamos a crear nuestra carpeta Eger 13 vamos a abrir
aquí Eger 13.
Muy bien vamos a crear nuestro Main punto vamos a escribir lo habitual.
Bueno muy bien y a quién le importa vamos a usar ciertos paquetes.
Vamos a ver qué paquetes usamos.
Primero el conocido FM3 y ahora vamos a usar el imputado el mismo que hemos usado en archivos porque
vamos a hacer una prueba para que ustedes vean como funciona esto vamos a usar el sistema operativo
el o ese y vamos a usar el logo.
El log es un paquete que me permite grabar en el blog y tener toda una serie de funciones que me van
a permitir crear nuestra bitácora de paso a paso en un programa sirven sobre todo para depurar sistemas
cuando ustedes estén haciendo un sistema y necesiten ver valores de variables y demás.
Voy a explicarles primero qué es el diferir el diferente es una instrucción que se va a ejecutar si
o si.
Cuando se detecta que una función se va por un retorno o por un error o por un fin de función cómo funciona
esto bueno tenemos nuestra función.
Vamos a crear nuestro archivo como hemos visto en el capítulo de manejo de archivos.
Vamos a decirle que esto va a ser un string un nombre vamos a hacer un prueba txt.
Vamos a decirle por ejemplo vamos a hacer la construcción de nuestro nuestra función Open de sistema
operativo.
Esto también lo hemos visto y ahora vamos a decirle que habrá archivo en este caso archivo nosotros
no lo tenemos en la carpeta de Eger 13 con lo cual nos va a dar seguramente un error vamos a colocar
un diferent Helfer Clowes que es lo que hace Google en este momento.
Cuando yo coloco una instrucción seguir antecedido por diferir esa función esa instrucción no se ejecuta.
Yo aquí no se ejecuta secuencialmente como la vemos visiblemente en pantalla se va a ejecutar recién
cuando yo salga de la función.
Entonces yo aquí puedo colocar más cosas.
Por ejemplo si errores distinto de nivel y puedo decirle aquí que haga un mete un FBT de error abriendo
el archivo y aquí lo que vamos a hacer es un exit recuerden que Exit como hemos visto en el capítulo
de archivos Exit no cierra la aplicación directamente.
Eso es común Enda de C++ o de otras otros lenguajes donde directamente finalizo la ejecución del programa.
Pero qué es lo que va a hacer si nosotros a simple vista vemos esto.
Creemos que primero hace una Open.
Luego hace un Kloss y luego evalúa esto no realmente lo que hace es primero un Open.
Luego continúa con la función y lo que le estoy diciendo aquí es ojo cuidado antes de irte de la función
sea por un error o por fin del programa hay que cerrar el archivo.
Entonces esto se va a ejecutar siempre aunque yo tenga acá un exit vamos a vamos a grabar esto vamos
a venir a nuestra terminal Eger 12 hacemos un hacemos under y vamos a hacer un garrón pero me está dando
un error algo aquí porque puse clases minuscula me parece que es mayúscula.
Vamos a grabar nuevamente.
Bueno ahí está borran Main puntocom recuerden que el archivo no existe por lo cual me va a dar perdón
estoy en ejercer tres Eger 13 por eso estoy ejecutando la recursión del capítulo anterior.
Voy a dejar 13 ahí tengo a mi main punto Main pun todo muy bien.
El archivo no existe por lo cual tendría que irse por error me da el error error abriendo el archivo
me aparece esto luego hace un éxito que siempre me va a poner en el log el X estatus el estatus es lo
que yo le coloco.
De esta manera yo puedo ver desde la consola cuál fue el valor que yo grabé en el éxito pero esto lo
que ha hecho es antes de salir del programa México chutado el diferendo Clowes lo que hace esto está
claro.
El archivo ha quedado cerrado.
En realidad ejecutó el cierre de un archivo que no existe pero yo tengo que liberar el buffer en memoria
porque cada vez que yo hago un Open el Open me crea un buffer en memoria que lo tengo que liberar si
no estaría consumiendo memoria.
Por más que el archivo no exista esto es lo que hace el diferent funciona para cualquier tipo de operación
no tiene por qué ser un manejo de archivos puede ser una rutina normal donde estoy manejando inclusive
bases de datos o lectura de datos por teclado o cálculos matemáticos y cuando yo coloqué un diferent
le estoy diciendo Alah al sistema que es muy importante que salga por el motivo que salga de esa función
no se olvide de ejecutar esa instrucción que colocó en el diferirá aquí podría colocar una instrucción
o un llamado a otra función directamente.
Vamos a ver ahora el tema de Panic y Recover Panic es una función que me da a mí para yo ejecutar es
como forzar un error yo coloco Upanic y un texto dentro del Panic y el sistema va a abortar y me va
a mostrar ese mensaje que yo coloco dentro de Panic por la consola.
Vamos a ver un ejemplo aquí mismo para no ensuciar vamos a hacer una función ejemplo Upanic vamos a
ir abajo así no mezclamos la hacienda como decimos en Argentina significa que vamos a tener separado
lo que vamos a hacer aquí aquí vamos a colocar por ejemplo esta asignación muy simple y vamos a preguntar
luego si es igual a uno entonces y aquí vamos a ejecutar un panic qué va a decirse en contro.
El valor de uno algo muy muy tonto vamos a para no estar ejecutando nuevamente el diferente vamos a
colocar esto aquí vamos a dejar esa parte comentaría así vamos rápidamente a nuestra parte y nuestra
sección de Panic vamos a ejecutar y vamos a ver que nuestro sistema aporta con un mensaje vamos a subir
un poquito porque si no aparece parece que vamos aquí arriba me dice después de ejecutarlo me dice Panic
se encontró el valor de uno y ahí me aborta totalmente el programa hago esto se hace cuando en cuando
por validación en un sistema encontramos que hay un dato que no falta que es crucial y que no puede
continuar el sistema sin ese dato y mostramos esto hace ejecutamos o cuando detectamos por bajo nivel
que hay un error de hardware bueno se usa para mil cosas el panic OK y ahora el panic no me da chance
aborta el programa para poder tener el control de un panic.
Existe algo llamado Recover y el Recover se va a ejecutar cuando detecta que hay un panic y va a tomar
el control del mensaje que yo he dado.
Cómo se ejecuta eso cómo se maneja.
Bueno vamos a ver aquí lo primero que tenemos que hacer para que cuando aborta por Panic yo detecte
que hay la necesidad de recuperarme del error voy a colocar un diferent es fundamental si yo no tengo
un diferent cuando el pánico quiere abortar la función y el programa no voy a poder ejecutar ningún
control.
Después del pánico después de Panic no hay control alguno que pueda hacer salvo que yo coloque un diferente.
Recuerden que el diferencial sea el motivo que sea por el cual se abortó la función o el programa se
va a ejecutar igual.
Es como una salvaguarda que yo tengo de que siempre va a ejecutar lo que diga el diferent.
Entonces luego de diferent lo que coloco es una función.
Esto no tiene porqué ser estrictamente así.
Para el ejemplo que vamos a ver ahora lo voy a hacer de esta manera y en esta función anónima fíjense
que no nombre.
Hago un diferido y una función anónima y esta función en su interior.
A ver si capturan el por qué puse una función anónima dentro de un Cipher.
Por qué el diferent va a ejecutar una sola cosa.
Recuerden nuestro ejemplo aquí arriba me va a ejecutar un Kloss yo no puedo colocar al diferir una lista
de instrucciones una debajo de la otra de lo que tienen que hacer él fuera ejecuta una sola cosa.
Entonces si lo que yo necesito hacer es ejecutar más de una instrucción.
Voy a tener que usar una función para qué.
Para que dentro de las llaves.
Ahí sí voy a poder colocar varias instrucciones.
Por ese motivo en el mundo del GOU se suele usar el diferent con una función anónima.
Si la función no fuera anónima tendría que crear una función con nombre por fuera de esta función y
ahí es llamarla desde Cypher es mucho es mucho trabajo para eso existen las funciones anónimas creo
en el DIFE una función anónima y entre las llaves.
Lo que voy a hacer es crear una variable llamada Reco la pueden llamar RRPP pacto lo que ustedes quieran
y a recolocó le voy a grabar un rico a ver ya me lo trae.
Ya me lo traje me lo sugiere.
No le voy a grabar un rico a ver qué es lo que hace el Recover.
Si hubiera encontrado un panic si luego vamos a achicar esto para que vean bien el código.
Yo ejecuto ejemplo Panay si dentro de ejemplo Panic no hubiera ningún Panic.
O sea que no hubo una salida Manica del programa.
Cuando termine de ejecutar todo el código de esta función va a ejecutar el diferent y él dice que va
a ser en una variable.
Va a grabar el resultado de un panic Recover ver metraje el resultado del último Panic.
Y si no hubo Panic.
Bueno entonces Riko va a ser nulo si no hubo ningún panic en la ejecución de mi programa cuando yo pregunte
por Riccó Verri cóvers una función que se fija hubo un panic.
Como no hubo Upanic Reco se va a terminar creando con un nivel.
Entonces inmediatamente luego de un de una asignación de Recover lo que tengo que preguntar es si Reco
es distinto Anil.
Si Reco es distinto ni significa que ocurrió un panic en mi función entonces aquí yo voy a poder poner
tranquilamente un Lobb por ejemplo fatal F fatal F.
En lo que es lo mismo que un printed F solamente que esto va a grabar directamente en el archivo de
log fatal de F.
Y le voy a colocar por ejemplo aquí falta fatal F funciona como Printer F así que voy a poder usar verbos
y formatear un texto así que lo que vamos a hacer ahora es ocurrió un error que generó Banic le colocaron
unos Carreter y aquí voy a colocar un verbo que es porcentajede que lo que hace es traerme una que le
voy a poder mandar por parametro un valor que es variable que es variable así que por qué no es un texto
en realidad esto no es un texto es un objeto.
Entonces esto sería como un Variant Variante de otros lenguajes.
Entonces lo que estoy haciendo aquí es grabar en un loop un fatal F de qué ocurrió un error de tipo
Panic y con esto yo voy a estar atajando el error para que no me aborte el programa y simplemente me
grabe en un log lo que yo tengo que grabar en el momento que yo tenga que hacer una auditoría del archivo
log.
Voy a poder tener el detalle de qué fue lo que pasó aquí por supuesto esto es un ejemplo puede haber
mucha más información la fecha la hora en la terminal voy a poder grabar toda la información que necesito
para una auditoría correcta de sistemas.
Muy bien aquí me faltó terminar mi función con los paréntesis porque no deja de ser una función que
no me va a devolver absolutamente nada.
Muy bien vamos a grabar esto vamos a venir a la terminal vamos a ahorrar un poquito y vamos a hacer
un GOW Rang de Main punto en Recover no va a traer nada si no no hubo un panic anterior.
Vamos a saber qué hizo aquí muy bien el logo ya de por si me grabã siempre la fecha y la hora esa es
algo maravilloso que me lo trae el logo automáticamente.
El fatal F me graba la fecha y la hora.
Fíjense que ustedes han visto el estudio COV cuando colocan el mouse arriba de una instrucción.
El GoW me trae la ayuda me dice que falta el F es el equivalente a brindé F como yo les había contado
por qué no uso.
F Si lo que está haciendo es mostrarme en el blog y en la consola por qué no uso aprendé F porqué printed
F simplemente muestra un texto y el log f el log fatal.
F Lo que haces no sólo me muestra un texto ya con un formato específico con fecha y hora sino que además
hace un o ese punto Exit 1 o sea me hace dos instrucciones en una.
Por eso es tan bueno el log fatal.
F Me hace un texto por pantalla y encima me adiciona información que es vital como la fecha y la hora
y además me ejecuta solapadamente una salida de programa llamando al paquete os de sistema operativo.
Esto es muy usado esto es usado saben cuando cuando estamos haciendo desarrollos en GOW y necesitamos
depurar errores necesitamos saber valores de variable errores y estamos medio trabados con algún desarrollo
solemos usar mucho esto del log fatal F Muy bien.
Entonces resumiendo así terminamos este capítulo tenemos un dizer que va a ser lo que se va a ejecutar
por último en cada función que yo lo coloque se va a ejecutar una instrucción o una función anónima
tenemos panic en donde nosotros forzamos un error y tenemos Recover donde podemos recuperarnos de ese
pánico que hemos lanzado previamente.
Esto es el manejo de errores en GOW van a ver que cuando empiecen a usarlo es muy amigable es muy versátil
muy fácil y reemplaza las viejas estructuras de troikas y demás que tenían su sus bemoles.
Esto es algo muy bueno que ha desarrollado Google en Golan así que nos vemos en el próximo capítulo
y seguimos aprendiendo lenguaje Go.