首頁 >後端開發 >Golang >何時以及為何在 Go 中使用 `err.(*os.PathError)`?

何時以及為何在 Go 中使用 `err.(*os.PathError)`?

Barbara Streisand
Barbara Streisand原創
2024-11-04 10:03:02631瀏覽

When and Why Use `err.(*os.PathError)` in Go?

理解Go 中的err.(*os.PathError)

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)的使用。讓我們深入研究一下它的意義。

err.(*os.PathError) 是什麼?

當呼叫 os.Create 時,它會傳回一個錯誤作為其第二個回傳值。此錯誤實作了錯誤介面 { Error() string }。任何擁有 Error 方法的資料類型都可以實作此介面並指派給它。

通常,只要輸出錯誤訊息就足夠了。然而,在給定的範例中,該程式旨在專門處理 ENOSPC(設備上沒有剩餘空間)錯誤。 os 套件提供了一個 *os.PathError 作為這種情況下的錯誤實作。如果您需要訪問有關錯誤的更多信息,可以強制轉換它。

型別斷言: e, ok := err.(*os.PathError)

語句 e, ok : = err.(os.PathError) 使用型別斷言。它驗證介面值 err 是否將 os.PathError 作為其具體類型,如果是,則傳回該值。如果介面中存在不同的類型(其他類型也可能實作錯誤介面),它只會傳回零值和 false(在本例中為 nil,false)。

以上是何時以及為何在 Go 中使用 `err.(*os.PathError)`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn