1
00:00:05,140 --> 00:00:08,740
Bueno y nos toca ahora el capítulo de las excepciones.

2
00:00:08,740 --> 00:00:16,030
El manejo de errores llegamos al mundo del diferirá Panic y el Recover y vamos a explicar cada una de

3
00:00:16,030 --> 00:00:25,290
estas tres instrucciones que nos da Go para manejar el tema de las excepciones y errores en Golan.

4
00:00:25,300 --> 00:00:32,170
A diferencia de otros lenguajes aquí no hay un troica catch ni un exception ni nada que tenga que ver

5
00:00:32,440 --> 00:00:35,870
con el mundo dejaba de punto net ni demás.

6
00:00:36,010 --> 00:00:43,210
Vamos a ver vamos a crear primero vamos en orden nos vamos a crear nuestra carpeta Eger 13 vamos a abrir

7
00:00:43,210 --> 00:00:45,190
aquí Eger 13.

8
00:00:45,340 --> 00:00:50,320
Muy bien vamos a crear nuestro Main punto vamos a escribir lo habitual.

9
00:00:50,320 --> 00:00:54,240
Bueno muy bien y a quién le importa vamos a usar ciertos paquetes.

10
00:00:54,250 --> 00:00:56,170
Vamos a ver qué paquetes usamos.

11
00:00:56,170 --> 00:01:06,510
Primero el conocido FM3 y ahora vamos a usar el imputado el mismo que hemos usado en archivos porque

12
00:01:06,520 --> 00:01:14,770
vamos a hacer una prueba para que ustedes vean como funciona esto vamos a usar el sistema operativo

13
00:01:15,210 --> 00:01:18,200
el o ese y vamos a usar el logo.

14
00:01:18,340 --> 00:01:27,130
El log es un paquete que me permite grabar en el blog y tener toda una serie de funciones que me van

15
00:01:27,130 --> 00:01:34,810
a permitir crear nuestra bitácora de paso a paso en un programa sirven sobre todo para depurar sistemas

16
00:01:35,130 --> 00:01:40,440
cuando ustedes estén haciendo un sistema y necesiten ver valores de variables y demás.

17
00:01:40,450 --> 00:01:48,430
Voy a explicarles primero qué es el diferir el diferente es una instrucción que se va a ejecutar si

18
00:01:48,640 --> 00:01:49,530
o si.

19
00:01:49,600 --> 00:01:58,270
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

20
00:01:58,270 --> 00:02:00,610
esto bueno tenemos nuestra función.

21
00:02:00,640 --> 00:02:07,130
Vamos a crear nuestro archivo como hemos visto en el capítulo de manejo de archivos.

22
00:02:07,390 --> 00:02:15,590
Vamos a decirle que esto va a ser un string un nombre vamos a hacer un prueba txt.

23
00:02:15,940 --> 00:02:26,230
Vamos a decirle por ejemplo vamos a hacer la construcción de nuestro nuestra función Open de sistema

24
00:02:26,230 --> 00:02:27,650
operativo.

25
00:02:27,700 --> 00:02:34,330
Esto también lo hemos visto y ahora vamos a decirle que habrá archivo en este caso archivo nosotros

26
00:02:34,330 --> 00:02:43,480
no lo tenemos en la carpeta de Eger 13 con lo cual nos va a dar seguramente un error vamos a colocar

27
00:02:43,480 --> 00:02:49,240
un diferent Helfer Clowes que es lo que hace Google en este momento.

28
00:02:49,240 --> 00:02:59,590
Cuando yo coloco una instrucción seguir antecedido por diferir esa función esa instrucción no se ejecuta.

29
00:03:00,000 --> 00:03:07,510
Yo aquí no se ejecuta secuencialmente como la vemos visiblemente en pantalla se va a ejecutar recién

30
00:03:07,510 --> 00:03:09,550
cuando yo salga de la función.

31
00:03:09,940 --> 00:03:12,460
Entonces yo aquí puedo colocar más cosas.

32
00:03:12,460 --> 00:03:25,570
Por ejemplo si errores distinto de nivel y puedo decirle aquí que haga un mete un FBT de error abriendo

33
00:03:26,140 --> 00:03:34,210
el archivo y aquí lo que vamos a hacer es un exit recuerden que Exit como hemos visto en el capítulo

34
00:03:34,210 --> 00:03:38,030
de archivos Exit no cierra la aplicación directamente.

35
00:03:38,040 --> 00:03:48,870
Eso es común Enda de C++ o de otras otros lenguajes donde directamente finalizo la ejecución del programa.

36
00:03:48,910 --> 00:03:52,890
Pero qué es lo que va a hacer si nosotros a simple vista vemos esto.

37
00:03:52,930 --> 00:03:55,330
Creemos que primero hace una Open.

38
00:03:55,330 --> 00:04:01,710
Luego hace un Kloss y luego evalúa esto no realmente lo que hace es primero un Open.

39
00:04:01,750 --> 00:04:10,120
Luego continúa con la función y lo que le estoy diciendo aquí es ojo cuidado antes de irte de la función

40
00:04:10,420 --> 00:04:15,230
sea por un error o por fin del programa hay que cerrar el archivo.

41
00:04:15,280 --> 00:04:25,120
Entonces esto se va a ejecutar siempre aunque yo tenga acá un exit vamos a vamos a grabar esto vamos

42
00:04:25,120 --> 00:04:33,910
a venir a nuestra terminal Eger 12 hacemos un hacemos under y vamos a hacer un garrón pero me está dando

43
00:04:33,910 --> 00:04:39,720
un error algo aquí porque puse clases minuscula me parece que es mayúscula.

44
00:04:39,790 --> 00:04:41,590
Vamos a grabar nuevamente.

45
00:04:41,590 --> 00:04:51,360
Bueno ahí está borran Main puntocom recuerden que el archivo no existe por lo cual me va a dar perdón

46
00:04:51,490 --> 00:04:58,730
estoy en ejercer tres Eger 13 por eso estoy ejecutando la recursión del capítulo anterior.

47
00:04:58,740 --> 00:05:06,380
Voy a dejar 13 ahí tengo a mi main punto Main pun todo muy bien.

48
00:05:06,500 --> 00:05:13,190
El archivo no existe por lo cual tendría que irse por error me da el error error abriendo el archivo

49
00:05:13,250 --> 00:05:21,770
me aparece esto luego hace un éxito que siempre me va a poner en el log el X estatus el estatus es lo

50
00:05:21,770 --> 00:05:23,150
que yo le coloco.

51
00:05:23,150 --> 00:05:31,310
De esta manera yo puedo ver desde la consola cuál fue el valor que yo grabé en el éxito pero esto lo

52
00:05:31,310 --> 00:05:39,830
que ha hecho es antes de salir del programa México chutado el diferendo Clowes lo que hace esto está

53
00:05:39,830 --> 00:05:40,660
claro.

54
00:05:40,760 --> 00:05:42,650
El archivo ha quedado cerrado.

55
00:05:42,650 --> 00:05:49,970
En realidad ejecutó el cierre de un archivo que no existe pero yo tengo que liberar el buffer en memoria

56
00:05:50,450 --> 00:05:56,900
porque cada vez que yo hago un Open el Open me crea un buffer en memoria que lo tengo que liberar si

57
00:05:56,900 --> 00:05:59,880
no estaría consumiendo memoria.

58
00:05:59,960 --> 00:06:06,950
Por más que el archivo no exista esto es lo que hace el diferent funciona para cualquier tipo de operación

59
00:06:07,250 --> 00:06:14,690
no tiene por qué ser un manejo de archivos puede ser una rutina normal donde estoy manejando inclusive

60
00:06:14,690 --> 00:06:21,680
bases de datos o lectura de datos por teclado o cálculos matemáticos y cuando yo coloqué un diferent

61
00:06:21,740 --> 00:06:31,640
le estoy diciendo Alah al sistema que es muy importante que salga por el motivo que salga de esa función

62
00:06:31,880 --> 00:06:38,870
no se olvide de ejecutar esa instrucción que colocó en el diferirá aquí podría colocar una instrucción

63
00:06:39,110 --> 00:06:42,170
o un llamado a otra función directamente.

64
00:06:42,170 --> 00:06:52,070
Vamos a ver ahora el tema de Panic y Recover Panic es una función que me da a mí para yo ejecutar es

65
00:06:52,070 --> 00:07:00,140
como forzar un error yo coloco Upanic y un texto dentro del Panic y el sistema va a abortar y me va

66
00:07:00,140 --> 00:07:05,510
a mostrar ese mensaje que yo coloco dentro de Panic por la consola.

67
00:07:05,510 --> 00:07:12,770
Vamos a ver un ejemplo aquí mismo para no ensuciar vamos a hacer una función ejemplo Upanic vamos a

68
00:07:12,770 --> 00:07:20,990
ir abajo así no mezclamos la hacienda como decimos en Argentina significa que vamos a tener separado

69
00:07:21,040 --> 00:07:30,710
lo que vamos a hacer aquí aquí vamos a colocar por ejemplo esta asignación muy simple y vamos a preguntar

70
00:07:30,710 --> 00:07:40,580
luego si es igual a uno entonces y aquí vamos a ejecutar un panic qué va a decirse en contro.

71
00:07:40,730 --> 00:07:49,370
El valor de uno algo muy muy tonto vamos a para no estar ejecutando nuevamente el diferente vamos a

72
00:07:49,370 --> 00:07:56,180
colocar esto aquí vamos a dejar esa parte comentaría así vamos rápidamente a nuestra parte y nuestra

73
00:07:56,180 --> 00:08:04,610
sección de Panic vamos a ejecutar y vamos a ver que nuestro sistema aporta con un mensaje vamos a subir

74
00:08:04,610 --> 00:08:11,570
un poquito porque si no aparece parece que vamos aquí arriba me dice después de ejecutarlo me dice Panic

75
00:08:11,630 --> 00:08:22,430
se encontró el valor de uno y ahí me aborta totalmente el programa hago esto se hace cuando en cuando

76
00:08:22,430 --> 00:08:29,240
por validación en un sistema encontramos que hay un dato que no falta que es crucial y que no puede

77
00:08:29,240 --> 00:08:37,970
continuar el sistema sin ese dato y mostramos esto hace ejecutamos o cuando detectamos por bajo nivel

78
00:08:37,970 --> 00:08:46,400
que hay un error de hardware bueno se usa para mil cosas el panic OK y ahora el panic no me da chance

79
00:08:46,430 --> 00:08:50,820
aborta el programa para poder tener el control de un panic.

80
00:08:50,870 --> 00:08:59,030
Existe algo llamado Recover y el Recover se va a ejecutar cuando detecta que hay un panic y va a tomar

81
00:08:59,030 --> 00:09:02,140
el control del mensaje que yo he dado.

82
00:09:02,330 --> 00:09:05,540
Cómo se ejecuta eso cómo se maneja.

83
00:09:05,540 --> 00:09:12,590
Bueno vamos a ver aquí lo primero que tenemos que hacer para que cuando aborta por Panic yo detecte

84
00:09:12,920 --> 00:09:20,300
que hay la necesidad de recuperarme del error voy a colocar un diferent es fundamental si yo no tengo

85
00:09:20,300 --> 00:09:26,480
un diferent cuando el pánico quiere abortar la función y el programa no voy a poder ejecutar ningún

86
00:09:26,480 --> 00:09:26,960
control.

87
00:09:26,960 --> 00:09:34,070
Después del pánico después de Panic no hay control alguno que pueda hacer salvo que yo coloque un diferente.

88
00:09:34,460 --> 00:09:40,970
Recuerden que el diferencial sea el motivo que sea por el cual se abortó la función o el programa se

89
00:09:40,970 --> 00:09:42,530
va a ejecutar igual.

90
00:09:42,680 --> 00:09:48,910
Es como una salvaguarda que yo tengo de que siempre va a ejecutar lo que diga el diferent.

91
00:09:48,970 --> 00:09:53,630
Entonces luego de diferent lo que coloco es una función.

92
00:09:53,630 --> 00:09:56,560
Esto no tiene porqué ser estrictamente así.

93
00:09:56,630 --> 00:10:03,020
Para el ejemplo que vamos a ver ahora lo voy a hacer de esta manera y en esta función anónima fíjense

94
00:10:03,020 --> 00:10:04,530
que no nombre.

95
00:10:04,620 --> 00:10:09,970
Hago un diferido y una función anónima y esta función en su interior.

96
00:10:09,970 --> 00:10:15,100
A ver si capturan el por qué puse una función anónima dentro de un Cipher.

97
00:10:15,100 --> 00:10:18,660
Por qué el diferent va a ejecutar una sola cosa.

98
00:10:18,700 --> 00:10:25,930
Recuerden nuestro ejemplo aquí arriba me va a ejecutar un Kloss yo no puedo colocar al diferir una lista

99
00:10:25,930 --> 00:10:31,900
de instrucciones una debajo de la otra de lo que tienen que hacer él fuera ejecuta una sola cosa.

100
00:10:32,260 --> 00:10:38,050
Entonces si lo que yo necesito hacer es ejecutar más de una instrucción.

101
00:10:38,050 --> 00:10:40,640
Voy a tener que usar una función para qué.

102
00:10:40,660 --> 00:10:43,030
Para que dentro de las llaves.

103
00:10:43,060 --> 00:10:46,540
Ahí sí voy a poder colocar varias instrucciones.

104
00:10:46,630 --> 00:10:53,250
Por ese motivo en el mundo del GOU se suele usar el diferent con una función anónima.

105
00:10:53,350 --> 00:11:01,730
Si la función no fuera anónima tendría que crear una función con nombre por fuera de esta función y

106
00:11:01,720 --> 00:11:09,910
ahí es llamarla desde Cypher es mucho es mucho trabajo para eso existen las funciones anónimas creo

107
00:11:09,910 --> 00:11:13,380
en el DIFE una función anónima y entre las llaves.

108
00:11:13,390 --> 00:11:22,180
Lo que voy a hacer es crear una variable llamada Reco la pueden llamar RRPP pacto lo que ustedes quieran

109
00:11:22,840 --> 00:11:27,450
y a recolocó le voy a grabar un rico a ver ya me lo trae.

110
00:11:27,520 --> 00:11:29,210
Ya me lo traje me lo sugiere.

111
00:11:29,210 --> 00:11:33,610
No le voy a grabar un rico a ver qué es lo que hace el Recover.

112
00:11:33,610 --> 00:11:40,480
Si hubiera encontrado un panic si luego vamos a achicar esto para que vean bien el código.

113
00:11:40,750 --> 00:11:47,300
Yo ejecuto ejemplo Panay si dentro de ejemplo Panic no hubiera ningún Panic.

114
00:11:47,410 --> 00:11:51,370
O sea que no hubo una salida Manica del programa.

115
00:11:51,370 --> 00:11:57,720
Cuando termine de ejecutar todo el código de esta función va a ejecutar el diferent y él dice que va

116
00:11:57,720 --> 00:11:59,920
a ser en una variable.

117
00:11:59,980 --> 00:12:06,870
Va a grabar el resultado de un panic Recover ver metraje el resultado del último Panic.

118
00:12:07,030 --> 00:12:08,440
Y si no hubo Panic.

119
00:12:08,440 --> 00:12:16,330
Bueno entonces Riko va a ser nulo si no hubo ningún panic en la ejecución de mi programa cuando yo pregunte

120
00:12:16,330 --> 00:12:20,390
por Riccó Verri cóvers una función que se fija hubo un panic.

121
00:12:20,530 --> 00:12:26,810
Como no hubo Upanic Reco se va a terminar creando con un nivel.

122
00:12:26,830 --> 00:12:34,270
Entonces inmediatamente luego de un de una asignación de Recover lo que tengo que preguntar es si Reco

123
00:12:35,740 --> 00:12:36,910
es distinto Anil.

124
00:12:38,200 --> 00:12:46,750
Si Reco es distinto ni significa que ocurrió un panic en mi función entonces aquí yo voy a poder poner

125
00:12:47,380 --> 00:12:56,170
tranquilamente un Lobb por ejemplo fatal F fatal F.

126
00:12:56,190 --> 00:13:02,630
En lo que es lo mismo que un printed F solamente que esto va a grabar directamente en el archivo de

127
00:13:02,630 --> 00:13:04,190
log fatal de F.

128
00:13:04,410 --> 00:13:14,860
Y le voy a colocar por ejemplo aquí falta fatal F funciona como Printer F así que voy a poder usar verbos

129
00:13:15,130 --> 00:13:27,430
y formatear un texto así que lo que vamos a hacer ahora es ocurrió un error que generó Banic le colocaron

130
00:13:27,790 --> 00:13:39,940
unos Carreter y aquí voy a colocar un verbo que es porcentajede que lo que hace es traerme una que le

131
00:13:39,940 --> 00:13:48,030
voy a poder mandar por parametro un valor que es variable que es variable así que por qué no es un texto

132
00:13:48,040 --> 00:13:51,140
en realidad esto no es un texto es un objeto.

133
00:13:51,240 --> 00:13:56,940
Entonces esto sería como un Variant Variante de otros lenguajes.

134
00:13:57,070 --> 00:14:06,150
Entonces lo que estoy haciendo aquí es grabar en un loop un fatal F de qué ocurrió un error de tipo

135
00:14:06,150 --> 00:14:12,760
Panic y con esto yo voy a estar atajando el error para que no me aborte el programa y simplemente me

136
00:14:12,760 --> 00:14:20,470
grabe en un log lo que yo tengo que grabar en el momento que yo tenga que hacer una auditoría del archivo

137
00:14:20,470 --> 00:14:20,800
log.

138
00:14:20,800 --> 00:14:27,910
Voy a poder tener el detalle de qué fue lo que pasó aquí por supuesto esto es un ejemplo puede haber

139
00:14:27,910 --> 00:14:35,800
mucha más información la fecha la hora en la terminal voy a poder grabar toda la información que necesito

140
00:14:35,980 --> 00:14:38,550
para una auditoría correcta de sistemas.

141
00:14:38,740 --> 00:14:47,980
Muy bien aquí me faltó terminar mi función con los paréntesis porque no deja de ser una función que

142
00:14:48,070 --> 00:14:51,160
no me va a devolver absolutamente nada.

143
00:14:51,160 --> 00:14:58,510
Muy bien vamos a grabar esto vamos a venir a la terminal vamos a ahorrar un poquito y vamos a hacer

144
00:14:58,510 --> 00:15:08,610
un GOW Rang de Main punto en Recover no va a traer nada si no no hubo un panic anterior.

145
00:15:08,880 --> 00:15:16,080
Vamos a saber qué hizo aquí muy bien el logo ya de por si me grabã siempre la fecha y la hora esa es

146
00:15:16,080 --> 00:15:20,580
algo maravilloso que me lo trae el logo automáticamente.

147
00:15:21,060 --> 00:15:24,470
El fatal F me graba la fecha y la hora.

148
00:15:24,480 --> 00:15:30,530
Fíjense que ustedes han visto el estudio COV cuando colocan el mouse arriba de una instrucción.

149
00:15:30,570 --> 00:15:37,380
El GoW me trae la ayuda me dice que falta el F es el equivalente a brindé F como yo les había contado

150
00:15:37,680 --> 00:15:38,790
por qué no uso.

151
00:15:38,850 --> 00:15:45,050
F Si lo que está haciendo es mostrarme en el blog y en la consola por qué no uso aprendé F porqué printed

152
00:15:45,050 --> 00:15:49,710
F simplemente muestra un texto y el log f el log fatal.

153
00:15:49,710 --> 00:15:58,830
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

154
00:15:59,250 --> 00:16:05,550
hace un o ese punto Exit 1 o sea me hace dos instrucciones en una.

155
00:16:05,610 --> 00:16:07,800
Por eso es tan bueno el log fatal.

156
00:16:07,800 --> 00:16:15,990
F Me hace un texto por pantalla y encima me adiciona información que es vital como la fecha y la hora

157
00:16:16,290 --> 00:16:25,610
y además me ejecuta solapadamente una salida de programa llamando al paquete os de sistema operativo.

158
00:16:25,650 --> 00:16:33,390
Esto es muy usado esto es usado saben cuando cuando estamos haciendo desarrollos en GOW y necesitamos

159
00:16:33,390 --> 00:16:40,710
depurar errores necesitamos saber valores de variable errores y estamos medio trabados con algún desarrollo

160
00:16:41,070 --> 00:16:45,440
solemos usar mucho esto del log fatal F Muy bien.

161
00:16:45,480 --> 00:16:52,860
Entonces resumiendo así terminamos este capítulo tenemos un dizer que va a ser lo que se va a ejecutar

162
00:16:52,870 --> 00:16:59,940
por último en cada función que yo lo coloque se va a ejecutar una instrucción o una función anónima

163
00:17:00,450 --> 00:17:08,310
tenemos panic en donde nosotros forzamos un error y tenemos Recover donde podemos recuperarnos de ese

164
00:17:08,320 --> 00:17:11,460
pánico que hemos lanzado previamente.

165
00:17:11,550 --> 00:17:18,630
Esto es el manejo de errores en GOW van a ver que cuando empiecen a usarlo es muy amigable es muy versátil

166
00:17:18,660 --> 00:17:27,150
muy fácil y reemplaza las viejas estructuras de troikas y demás que tenían su sus bemoles.

167
00:17:27,150 --> 00:17:34,680
Esto es algo muy bueno que ha desarrollado Google en Golan así que nos vemos en el próximo capítulo

168
00:17:34,680 --> 00:17:37,130
y seguimos aprendiendo lenguaje Go.
