我们可以延迟编写循环/条件/代码块吗?

Jis*_*hap -1 resultset exit-code go

嗨,我是golang的新手,

我使用defer来关闭我的结果集.

defer res.Close() 
Run Code Online (Sandbox Code Playgroud)

我想res is nil在打电话之前 检查一下res.Close().

我在函数的末尾有下面的代码块,但是由于某些错误而退出时不会调用它.

if(res!=nil){
            res.Close()
        }
Run Code Online (Sandbox Code Playgroud)

我想知道有什么办法可以实现这个目的defer.

defer  if(res!=nil){
                res.Close()
            }
Run Code Online (Sandbox Code Playgroud)

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

Den*_*ret 5

您可以传递给defer函数调用,这可以是函数文字:

defer func() {
     if res!=nil {
          res.Close()
     }
}()
Run Code Online (Sandbox Code Playgroud)

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