Por ejemplo, en esta respuesta:¿Qué es esto de "foo. (Bar.Baz)" en el código Go?
https://stackoverflow.com/a/10385867/20654
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Lo que se llama err.(*exec.ExitError)
? ¿Como funciona?
Por ejemplo, en esta respuesta:¿Qué es esto de "foo. (Bar.Baz)" en el código Go?
https://stackoverflow.com/a/10385867/20654
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Lo que se llama err.(*exec.ExitError)
? ¿Como funciona?
Es una afirmación de tipo. No puedo explicarlo mejor que the spec.
Es una afirmación de tipo. Esa declaración if
está comprobando si err
también es *exec.ExitError
. El ok
le permite saber si fue o no fue. Finalmente, exiterr
es err
, pero "convertido" a *exec.ExitError
. Esto solo funciona con interface
tipos.
También puede omitir el ok
si está 100000 por ciento seguro del tipo subyacente. Pero si omite ok
y resulta que estaba equivocado, obtendrá un panic
.
// find out at runtime if this is true by checking second value
exitErr, isExitError := err.(*exec.ExitError)
// will panic if err is not *exec.ExitError
exitErr := err.(*exec.ExitError)
El ok
no es parte de la sintaxis, por cierto. Es solo un booleano y puedes ponerle el nombre que quieras.
Gracias. En ese sentido, ¿es similar a un elenco? – OscarRyz
Bueno, solo "similar". La función de conversión se llama [conversión] (http://golang.org/ref/spec#Conversions) en Go. Puede ser correcto decir que la conversión ocurre en tiempo de compilación y aserción en tiempo de ejecución. – Mostafa