Golang 定时循环的几种实现方法
例子1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello, 世界")
loopWorker()
}
func loopWorker() {
i := 0
ticker := time.NewTicker(6 * time.Second) // --- A
defer ticker.Stop()
for {
select {
case <-ticker.C:
// 执行我们想要的操作
i++
doxx(i)
}
}
}
func doxx(i int) {
time.Sleep(7 * time.Second) // --- B
fmt.Println("aaa", i, time.Now().Unix())
}
// 时间A和B 以时间长的为间隔周期
例子2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
tick2 := time.Tick(2e8)
boom := time.After(5e8)
for {
select {
case <-tick:
fmt.Println("tick.")
case <-tick2:
fmt.Println("tick2.")
case <-boom:
fmt.Println("BOOM!")
// return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
例子3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import (
"fmt"
"time"
)
func main() {
for {
timer := time.NewTimer(5 * time.Second) // -- A
<-timer.C
time.Sleep(6 * time.Second) // -- B
fmt.Println("看看时间", time.Now().Format("2006-01-02 15:04:05"))
}
}
// 循环时间是A+B
例子4,最暴力的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
package main
import (
"fmt"
"time"
)
func main() {
for {
time.Sleep(6 * time.Second)
fmt.Println("看看时间", time.Now().Format("2006-01-02 15:04:05"))
}
}
总结
个人觉得第二种比较优雅。
本文网址: https://golangnote.com/topic/190.html 转摘请注明来源