延迟具有返回值的函数时处理错误
延迟返回值而不检查错误的函数时,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中文网其他相关文章!