2013-08-20 17 views

Odpowiedz

14

os.Create zwraca błąd jako drugą zwracaną wartość. Sam błąd to interfacetype error interface { Error() string }. Każdy typ danych, który ma metodę Error, zaimplementuje ten interfejs i można go przypisać.

W większości przypadków wystarczy wydrukować błąd, ale w tym przykładzie chciałbyś jawnie obsłużyć ENOSPC (brak miejsca na urządzeniu). Pakiet os zwraca w tym przypadku *os.PathError jako implementację błędu, a jeśli chcesz uzyskać dostęp do dodatkowych informacji o błędzie, tj. Wszystko oprócz metody Error() string, musisz ją przekonwertować.

Oświadczenie e, ok := err.(*os.PathError) jest type assertion. Sprawdza, czy wartość interfejsu err zawiera *os.PathError jako typ konkretny i zwróci go. Jeśli w interfejsie przechowywany był inny typ (mogą istnieć inne typy implementujące interfejs error), po prostu zwróci on w tym przypadku wartość zero value i wartość false, tj. nil, false.

7

Z docs, to jest zapewnienie Typ:

Przez wyrażenie x typu interfejsu oraz typu T, pierwotnego ekspresji

x.(T) 

stwierdza, że ​​x jest nie jest zerowe, a wartość zapisana w x jest typu T. Zapis x. (T) nazywany jest asercją typu.