2013-08-20 16 views

risposta

14

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.

7

Dal docs, che è un tipo di asserzione:

Per un'espressione x di tipo di interfaccia e un tipo T, l'espressione primaria

x.(T) 

afferma che x sia non è nulla e il valore memorizzato in x è di tipo T. La notazione x. (T) è chiamata tipo asserzione.