如何在Golang中每秒多次执行命令?

Hao*_* Ge 1 go

我想N每秒打印一行.

for i := 0; i < N; i++ {
  fmt.Println(getLogs())
  time.Sleep(1000000000/N * time.Nanosecond)
}
Run Code Online (Sandbox Code Playgroud)

但似乎fmt.Println()getLogs()也将消耗时间.所以实际上打印N线会花费我超过1秒.

说,getLogs()并且fmt.Println()将花费1毫秒.我想每秒打印100万行.因此,打印1行将花费1毫秒getLogs(),1毫秒打印,1毫秒睡眠...打印N行将花费我3秒.

有更好的解决方案来更准确地实现这一目

小智 5

你可以使用time.NewTicker(试试The Go Playground):

package main

import (
    "fmt"
    "time"
)

func main() {
    const N = 4
    ticker := time.NewTicker(1000000000 / N * time.Nanosecond)
    for i := 0; i < N; i++ {
        fmt.Println(getLogs(i))
        <-ticker.C
    }
    ticker.Stop()
}

func getLogs(i int) int {
    time.Sleep(1 * time.Millisecond)
    return i
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
1
2
3
Run Code Online (Sandbox Code Playgroud)

查看func NewTicker(d Duration) *Ticker文档:

NewTicker返回一个Ticker包含通道的new ,该通道将使用duration参数指定的句点发送时间.它调整间隔或下降滴答以弥补慢速接收器.持续时间d必须大于零; 如果没有,NewTicker会恐慌.停止代码以释放相关资源.


另请参阅:Golang中午运行代码