syntax - help - ubuntu sudo apt-get upgrade
¿Qué es esta cosa "foo.(Bar.Baz)" en el código Go? (2)
Por ejemplo, en esta respuesta:
https://stackoverflow.com/a/10385867/20654
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
¿Qué es eso err.(*exec.ExitError)
llamado? ¿Como funciona?
Es una afirmación de tipo. No puedo explicarlo mejor que la especificación .
Es una afirmación de tipo. Esa declaración if
está comprobando si err
también es *exec.ExitError
. ok
vamos a saber si fue o no fue. Finalmente, exiterr
está exiterr
, pero "convertido" a *exec.ExitError
. Esto solo funciona con tipos de interface
.
También puede omitir el ok
si está 100000 por ciento seguro del tipo subyacente. Pero, si omites lo ok
y resulta que te equivocaste, entonces te entrará el 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.