os.Create
restituisce un errore come secondo valore di ritorno. L'errore stesso è un interfacetype error interface { Error() string }
. Qualsiasi tipo di dati che ha un metodo Error
implementerà quell'interfaccia e può essere assegnato.
Nella maggior parte dei casi, è sufficiente stampare l'errore, ma in questo esempio, si desidera gestire in modo esplicito lo ENOSPC
(spazio non disponibile sul dispositivo). Il pacchetto os
restituisce un *os.PathError
come implementazione di errore in questo caso e se si desidera accedere a ulteriori informazioni sull'errore, ad esempio tutto il metodo Error() string
, è necessario convertirlo.
La dichiarazione e, ok := err.(*os.PathError)
è un type assertion. Verificherà se il valore dell'interfaccia err
contiene un *os.PathError
come tipo concreto e lo restituirà. Se un altro tipo è stato memorizzato nell'interfaccia (potrebbero esserci altri tipi che implementano l'interfaccia error
), restituirà semplicemente il zero value e il falso, ovvero nil, false
in questo caso.