Per esempio, in questa risposta:Che cos'è questa cosa "foo. (Bar.Baz)" nel codice Go?
https://stackoverflow.com/a/10385867/20654
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Cos'è che err.(*exec.ExitError)
chiama? Come funziona?
Per esempio, in questa risposta:Che cos'è questa cosa "foo. (Bar.Baz)" nel codice Go?
https://stackoverflow.com/a/10385867/20654
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Cos'è che err.(*exec.ExitError)
chiama? Come funziona?
È tipo asserzione. Non riesco a spiegarlo meglio di the spec.
È un'asserzione di tipo. L'istruzione if
sta verificando se err
è anche un *exec.ExitError
. Il ok
ti consente di sapere se era o non era. Infine, exiterr
è err
, ma "convertito" in *exec.ExitError
. Funziona solo con i tipi interface
.
È inoltre possibile omettere lo ok
se si è sicuri al 100000 percento del tipo sottostante. Ma, se ometti ok
e risulta che ti sbagliavi, otterrai 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)
Il ok
non è parte della sintassi, tra l'altro. È solo un booleano e puoi chiamarlo come vuoi.
Grazie. In questo senso è simile a un cast? – OscarRyz
Beh, solo "simili". Il casting è chiamato [conversion] (http://golang.org/ref/spec#Conversions) in Go. Potrebbe essere giusto dire che la conversione avviene in fase di compilazione e l'asserzione in fase di runtime. – Mostafa