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

Go中延遲有傳回值的函數時如何處理錯誤?

Patricia Arquette
發布: 2024-11-03 01:18:29
原創
871 人瀏覽過

How to Handle Errors When Deferring Functions with Return Values in Go?

當延遲具有傳回值的函數時處理錯誤

延遲回傳值而不檢查錯誤的函數時,golang/errcheck linter 會發出警告。為了解決這個問題,必須儲存返回值,這需要推遲另一個呼叫原始函數的函數。

一種方法是使用匿名函數,如下所示:

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        fmt.Println("Error when closing:", err)
    }
}()</code>
登入後複製

或者,可以定義輔助函數:

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        fmt.Println("Received error:", err)
    }
}</code>
登入後複製

,可以如下使用:

<code class="go">defer Check(r.Body.Close)</code>
登入後複製

對於多個延遲函數調用,可以創建接受多個函數的修改後的輔助函數:

<code class="go">func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            fmt.Println("Received error:", err)
        }
    }
}</code>
登入後複製

此外,Checks() 函數利用向下循環來反映延遲函數的先進後出執行順序。

以上是Go中延遲有傳回值的函數時如何處理錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板