我想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中午运行代码