處理Go 中返回值錯誤的延遲函數
當返回變數的函數在沒有延遲的情況下被延遲時,gometalinter 和errcheck 正確地發出警告檢查其回傳的錯誤。這可能會導致未處理的錯誤和潛在的運行時問題。
處理這種情況的習慣用法不是推遲函數本身,而是將其包裝在另一個檢查返回值的函數中。這是一個例子:
defer func() {
if err := r.Body.Close(); err != nil {
// Handle the error
}
}()
透過使用匿名函數,您可以捕獲延遲函數的返回值並處理發生的任何錯誤。
或者,您可以建立一個輔助函數來簡化該過程:
func Check(f func() error) {
if err := f(); err != nil {
// Handle the error
}
}
此輔助函數可用於延遲多個函數,確保檢查它們的回傳值:
defer Check(r.Body.Close)
defer Check(SomeOtherFunc)
您甚至可以擴展輔助函數以接受多個函數:
func Checks(fs ...func() error) {
for i := len(fs) - 1; i >= 0; i-- {
if err := fs[i](); err != nil {
// Handle the error
}
}
}
這允許您推遲多個函數並以更簡潔和有組織的方式處理它們的錯誤:
defer Checks(r.Body.Close, SomeOtherFunc)
為了確保以正確的順序處理錯誤,Checks() 函數使用向下循環以與宣告相反的順序執行函數。這與延遲函數的執行順序一致,最後一個延遲函數首先執行。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3