golang for select { case } 语句 time.Ticker每隔指定时间间隔就执行一次;time.Timer在指定的时间之后执行一次,Ticker和Timer的区别和用法总结

        在golang中我们可以通过使用  for select { case } 语句+ time.Ticker时间断续器 来创建一个在指定时间间隔循环执行的时间断续器。

 time.Ticker时间断续器 和 time.Timer定时器 的区别 

注意,我们在使用时需要分辨清除golang中的这2个对象。

  • time.Ticker时间断续器(使用time.NewTicker函数创建)是每隔一段时间就执行一次,只要这个ticker不关闭就会一直执行下去; 
  • time.Timer定时器(使用time.NewTimer 函数创建)是在指定的时间之后执行一次就会被关闭。 golang中定时器我们一般使用 

for select {case} 语句+ time.Ticker使用示例

以下示例创建一个时间断续器, 每隔1分钟执行一次 【每隔1分钟打印一次 hello world! 和当前时间】, go底层会在我们指定的时间间隔就将当前的时间放入到 ticker.C 通道中,下面示例中我们使用 ts来接收通道中的时间并将他打印了出来。

   // 时间断续器 每隔1分钟执行一次
	ticker := time.NewTicker(1 * time.Minute)
	defer ticker.Stop() // 确保函数关闭时关闭这个断续器
	done := make(chan bool, 1)
	// for select 循环
	for {
		select {
		case ts:=<-ticker.C: // 这个分支会每隔1分钟执行一次
			fmt.Printf("hello world! now time is:%v", ts.Format(time.RFC3339))
		case <-done: // 这个不会被执行,仅满足select语法 (多个case语句)
			return
		}
	}

注意上面的select的第二个case分支,这个是不会被执行的,因为我们只是创建了这个通道,而没有向着通道写入任何的数据。 在这里的作用就只是为了满足select语句的语法而已.

time.Timer定时器使用示例

对于定时器,由于他只会在指定的时间之后执行一次,我们就使用select即可。 

    // 1分钟后执行的定时器
    timer:=time.NewTimer(1 * time.Minute)

	select{
		case ts:=<-timer.C: // 在指定的时间之后会被执行一次
			fmt.Printf("时间到了! %v\n",ts.Format(time.RFC3339))
			timer.Stop()
		case <-done: // 不会被执行
			break
	}

总结: golang中我们如果要创建一个每隔一段时间就执行一次的逻辑就使用 time.NewTicker 创建时间断续器, 如果我们希望在指定时间之后只执行一次就使用 time.NewTimer 创建一个定时器。 select语句的作用是在多个通道中选择一个可用的通道执行,他最少需要有2个以上的通道, 且每隔case语句后面必须跟的是io操作, 同时select语句会阻塞当前进程直到其中的一个通道可用。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值