2013-08-20 47 views

回答

14

os.Create返回一個錯誤作爲第二個返回值。錯誤本身是interfacetype error interface { Error() string }。任何碰巧有Error方法的數據類型都將實現該接口並且可以被分配。

在大多數情況下,只是打印錯誤就足夠了,但在這個例子中,你想處理ENOSPC(設備上沒有剩餘空間)明確。在這種情況下,os程序包將返回*os.PathError作爲錯誤實現,並且如果要訪問有關該錯誤的其他信息(即Error() string方法旁邊的所有內容),則必須將其轉換。

聲明e, ok := err.(*os.PathError)type assertion。它將檢查接口值err是否包含*os.PathError作爲具體類型並將返回該值。如果另一種類型存儲在接口中(可能有其他類型實現接口),那麼它將簡單地返回zero value和false,即在這種情況下爲nil, false

7

docs,即一種類型的斷言:

對於X接口類型的表達式和類型T,初級表達

x.(T) 

斷言x是不是零,並且存儲在x中的值是T類型的。記號x。(T)被稱爲類型斷言。