在defer语句中,我们不能编写循环、条件或代码块。

huangapple go评论81阅读模式
英文:

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

问题

嗨,我是你的中文翻译助手,以下是翻译好的内容:

嗨,我是golang的新手,

我使用defer来关闭我的结果集,就像这样:

defer res.Close()

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

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

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

我想知道是否有办法在使用defer时实现这个功能。

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

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

英文:

Hi I am new to golang,

I use defer to close my result set like this.

defer res.Close() 

I would like to check whether res is nil or not before calling res.Close().

I have below code block in the end of the function but it is not invoked when exited due to some error.

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

I would like to know is there any way I could achieve this using defer .

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

Also what is the Idiomatic way for handling these situations?

答案1

得分: 5

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

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

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

英文:

You can pass to defer a function call, and this can be a function literal :

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

Note that you usually avoid this problem by writing the defer statement right after the resource assignment.

huangapple
  • 本文由 发表于 2016年11月16日 17:47:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/40628760.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定