GolangNote

Golang笔记

Golang 定时循环的实现

Permalink

Golang 定时循环的几种实现方法

Golang 定时循环的实现

例子1

Go: 定时循环 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

Go: 定时循环 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
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

Go: 定时循环 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,最暴力的方法

Go: 定时循环 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"))
	}
}

总结

个人觉得第二种比较优雅。

Related articles

Golang实现简单的Socks5代理

Socks5 代理较 `http/https` 代理有较好的性能,下面是借鉴某个著名开源软件的 local 实现的简单代理。...

Golang phantomjs 动态代理实现

phantomjs 是个很优秀的软件,虽然现在被chrome headless 抢了风头,但在某些特定场合,使用phantomjs 还是很方便,这里是介绍使用Go 实现动态代理。...

Write a Comment to "Golang 定时循环的实现"

Submit Comment Login
Based on Golang + fastHTTP + youdb | go1.16 Processed in 1ms