我有这个代码:defer common.LogWarning( "b09ee123-f18b-46a8-b80d-f8361771178d:", resp.Body.Close(), // gets called immediately, is *not* deferred..)而 common.LogWarning 就是这样:func LogWarning(uuid string, err error) { if err != nil { log.Warning(uuid, err) }}问题是它resp.Body.Close()会立即被调用 - 该调用不会被延迟,那么它是如何工作的呢?为什么不延迟整个代码块?
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
该defer语句延迟函数调用。立即评估函数的参数。
使用匿名函数来实现您的目标:
defer func() {
common.LogWarning("b09ee123-f18b-46a8-b80d-f8361771178d:",
resp.Body.Close())
}()
由尾随代表的调用()被延迟。
开满天机
TA贡献1786条经验 获得超13个赞
defer将函数的执行推迟到当前函数返回。立即评估函数的参数。
https://tour.golang.org/flowcontrol/12
如果您需要延迟所有评估都将被延迟的代码块,请将其设为函数:
defer func() {
// Stuff to defer here
}()
``
- 3 回答
- 0 关注
- 167 浏览
添加回答
举报
0/150
提交
取消
