当前位置: 首页 > 面试题库 >

推迟使用说明

甄佐
2023-03-14
问题内容

假设我有以下功能

func printNumbers(){
 var x int

 defer fmt.Println(x)

 for i := 0; i < 5; i++{
  x++
 }
}

如规范中所述:

每次执行“ defer”语句时,将照常评估调用的函数值和参数并重新保存,但不会调用实际函数。

显然,函数执行结束时将输出零。但是,如果我想打印出变量的最终值该x怎么办?

我提出了以下解决方案:

func printNumbers(){
  var x int

  printVal := func(){
    fmt.Println(x)
  }

  defer printVal()

  for i := 0; i < 5; i++{
    x++
  }
}

所以我想知道是否有更好的方法来解决此问题。


问题答案:

如果defer有参数,则在defer语句的行对其进行评估;以下代码段对此进行了说明,其中defer将显示0:

func printNumber() {
   i := 0
   defer fmt.Println(i) // will print 0
   i++
   return
}

如果要将语句或函数的执行推迟到封闭(调用)函数结束之前,可以将匿名函数用作延迟语句。这是一个更新的示例:

func printNumbers() {
    x := 0
    defer func() { fmt.Println(x) }()
    for i:=0; i < 5; i++ {
        x++;
    }
    return
}

http://play.golang.org/p/YQGQ_8a0_9



 类似资料:
  • 问题内容: 我将Q节点库用于Promises,我认为这个问题也适用于Bluebird库。 语境 我需要对自己的自定义函数和node.js 样式异步函数进行一些函数调用。 如果我正在调用这样的函数: 同步功能 并需要以上内容来执行此功能: 同步功能 并且需要调用类似于以下内容的本机节点函数: 异步功能 并需要以上内容来执行此功能: 同步功能 题 为了使我的所有函数“递延”或答应知道,在这里要做的“正

  • 在spring-AMQP中,有可能以某种方式推迟监听来自某个特定队列的消息吗? 在我的用例中,我有一个服务,它必须侦听两个RabbitMQ队列上的消息。第一个专用于此服务,第二个用于my service的多个实例(运行在不同的机器上)的负载平衡作业。 我的statup服务通过第一个队列接收配置并自我配置。只有在配置之后,才允许处理第二个队列中的“标准”作业--而不是在配置之前。 我怎样才能做到这一

  • 问题内容: 是否有人使用过nodejs模块“ deferred”和“ mongoose”?我试图让deferred.promisify方法可以在猫鼬模型的函数上工作,以便我可以轻松地将它们链接起来,但是会遇到一些麻烦。具体来说,我想对和函数进行赋值处理,以便可以通过ObjectID链接查找另一个文档引用的一个文档。 这就是我所拥有的:https : //gist.github.com/332182

  • 及策-精细化移动归因解决方案 移动 APP 推广效果精准可视化呈现、国内独家曝光效果评估&多触点归因评估,深入剖析渠道广告贡献,助您科学评估媒体角色和定位,合理分配渠道预算,提升ROI。 更科学、更精细评估媒体效果,实现 ROI 最大化 国内独家 MTA 多触点归因模型,还原用户从广告曝光、点击到激活转化的完整链路。 可视化呈现用户媒体接触轨迹; 清晰查看媒体之间相互辅助转化,媒体重合度; 曝光转

  • 本文档所描述的 API 接口,旨在输出 百度移动统计 站点的报告数据,为站点用户提供方便。为方便您使用此API,请注意以下几点: 为使调用方与接口提供方的接口版本保持一致,请调用接口的开发者提供联系信息,以供接口升级时提前通知,避免不必要的损失。信息通过邮件提供,具体如下: 邮箱地址:apptongji@baidu.com 邮件标题:百度移动统计接口调用方信息备案-“开发者姓名” 邮件内容: 开发

  • 播放SDK 版本: 2.0.1 日期: 2020-09-29 SDK文档及下载 下载地址:https://hdgit.bokecc.com/ccvideo/VOD_miniprogram 版本更新记录 更新日期 版本号 更新内容 2020-09-29 V2.0.1 修复播放结束回调不成功问题 2020-07-16 V2.0.0 包含播放、暂停、切换视频、设置播放时长、获取当前播放时长、获取视频时长