首頁 > 後端開發 > Golang > 主體

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

Barbara Streisand
發布: 2024-11-04 10:03:02
原創
564 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!