【问题标题】:How to build a tick for loop without using the loop variable如何在不使用循环变量的情况下为循环构建刻度
【发布时间】:2014-10-30 15:32:56
【问题描述】:

我有一个 for 循环在一个时间间隔内持续运行,但我只是将它用作我希望每 10 分钟运行一次的函数。我怎样才能声明这个for循环而不必在循环内的某处使用'x'

interval := time.Tick(10 * time.Minute)

for x := range interval {
  ...code that does not use x
}

我尝试过重构 for 循环,但如果不专门使用“x”就无法运行它,我知道我可以简单地在循环内使用“x”做一些事情,但我宁愿学习如何正确实现这一点for 循环然后进行破解。

【问题讨论】:

    标签: go intervals


    【解决方案1】:

    要么

    for {
            <-time.After(someTime)
            // ...
    }
    

    interval := time.Tick(someTime)
    
    for ; ; <-interval { // First interval == 0
            // ...
    }
    

    interval := time.Tick(someTime)
    
    for {
            <-interval
            // ...
    }
    

    【讨论】:

    • 我认为第二种形式不会编译(对于
    【解决方案2】:

    您可以使用_ 来表示您将忽略的变量:

    interval := time.Tick(10 * time.Minute)
    
    for _ = range interval {
      ...
    }
    

    spec 说:

    由下划线字符_表示的空白标识符可以 像任何其他标识符一样在声明中使用,但声明 不会引入新的绑定。

    【讨论】:

      【解决方案3】:

      我怎样才能声明这个for循环而不必在循环内的某处使用'x'

      从 go1.4(2014 年第四季度)开始,您将能够:

      for range interval {
        ...
      }
      

      go tip 1.4 doc:

      从 Go 1.4 开始,无变量形式现在是合法的
      这种模式很少出现,但出现时代码会更简洁。

      更新:此更改严格向后兼容现有的 Go 程序,但分析 Go 解析树的工具可能需要修改以接受这种新形式,因为 RangeStmtKey 字段现在可能是 nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2020-04-30
        • 2014-05-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多