英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论