我们可以在 defer 中编写 loops/conditions/block 的代码吗?

Can we write loops/conditions/block of code in a defer?

嗨,我是 golang 的新手,

我像这样使用 defer 来关闭我的结果集。

defer res.Close() 

我想在调用res.Close()之前检查是否res is nil

我在函数末尾有以下代码块,但由于某些错误退出时未调用它。

if(res!=nil){
            res.Close()
        }

我想知道有什么方法可以使用 defer 实现此目的。

defer  if(res!=nil){
                res.Close()
            }

此外,处理这些情况的惯用方法是什么?

你可以传递给defer一个函数调用,这可以是一个函数字面量:

defer func() {
     if res!=nil {
          res.Close()
     }
}()

请注意,您通常会在资源分配后立即编写 defer 语句来避免此问题。