golang标准库time

Timer

Timer顾名思义,就是定时器的意思,可以实现一些定时操作,内部也是通过channel来实现的。

package main

import (
	"fmt"
	"time"
)

func main() {

	t1 := time.Now()
	fmt.Printf("t1: %v\n", t1)

	<-time.After(time.Second * 2) //等待2秒方法1
	t2 := time.Now()
	fmt.Printf("t2: %v\n", t2)

	timer2 := time.NewTimer(time.Second * 2) //等待2秒方法2
	<-timer2.C
	t3 := time.Now()
	fmt.Printf("t3: %v\n", t3)

	time.Sleep(time.Second * 2) //等待2秒方法3
	t4 := time.Now()
	fmt.Printf("t4: %v\n", t4)

	timer3 := time.NewTimer(time.Second)
	go func() {
		<-timer3.C
		fmt.Println("Timer 3 expired")
	}()

	stop := timer3.Stop() //停止定时器
	//阻止timer事件发生,当函数执行后,timer计时器停止,相应的事件不再执行
	if stop {
		fmt.Println("Timer 3 stop")
	}

	timer4 := time.NewTimer(time.Second * 5) //原来设置5s
	timer4.Reset(time.Second * 4)            //重新设置时间,重新开始计时
	<-timer4.C
	t5 := time.Now()
	fmt.Printf("t5: %v\n", t5)

}

Ticker

Timer只执行一次,Ticker可以周期的执行。
实例1

package main

import (
	"fmt"
	"time"
)

func main() {
	ticker := time.NewTicker(time.Second)
	counter := 1
	for _ = range ticker.C {
		fmt.Println("ticker 1")
		counter++
		if counter >= 3 {
			ticker.Stop()
			break
		}
	}
}

运行结果

ticker 1
ticker 1

实例2

package main

import (
	"fmt"
	"time"
)

func main() {

	chanInt := make(chan int)

	ticker := time.NewTicker(time.Second)

	go func() {
		for _ = range ticker.C {
			select {
			case chanInt <- 1:
			case chanInt <- 2:
			case chanInt <- 3:

			}
		}
	}()

	sum := 0
	for v := range chanInt {
		fmt.Printf("接收: %v\n", v)
		sum += v
		if sum >= 10 {
			fmt.Printf("sum: %v\n", sum)
			break
		}
	}
}

运行结果

在接收: 2
接收: 1
接收: 1
接收: 2
接收: 1
接收: 2
接收: 2
sum: 11
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值