首頁  >  文章  >  後端開發  >  Go中延遲有傳回值的函數時如何處理錯誤?

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

Patricia Arquette
Patricia Arquette原創
2024-11-03 01:18:29868瀏覽

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

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