Go 的有效錯誤處理文件(https://golang.org/doc/ effective_go.html #errors),你可能遇到過這樣的程式碼片段:
<code class="go">for try := 0; try < 2; try++ { file, err = os.Create(filename) if err == nil { return } if e, ok := err.(*os.PathError); ok && e.Err == syscall.ENOSPC { deleteTempFiles() // Recover some space. continue } return }</code>
這段程式碼示範了err.(*os.PathError)的使用。讓我們深入研究一下它的意義。
當呼叫 os.Create 時,它會傳回一個錯誤作為其第二個回傳值。此錯誤實作了錯誤介面 { Error() string }。任何擁有 Error 方法的資料類型都可以實作此介面並指派給它。
通常,只要輸出錯誤訊息就足夠了。然而,在給定的範例中,該程式旨在專門處理 ENOSPC(設備上沒有剩餘空間)錯誤。 os 套件提供了一個 *os.PathError 作為這種情況下的錯誤實作。如果您需要訪問有關錯誤的更多信息,可以強制轉換它。
語句 e, ok : = err.(os.PathError) 使用型別斷言。它驗證介面值 err 是否將 os.PathError 作為其具體類型,如果是,則傳回該值。如果介面中存在不同的類型(其他類型也可能實作錯誤介面),它只會傳回零值和 false(在本例中為 nil,false)。
以上是何時以及為何在 Go 中使用 `err.(*os.PathError)`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!