當延遲具有傳回值的函數時處理錯誤
延遲回傳值而不檢查錯誤的函數時,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中文網其他相關文章!