介绍 Golang Timer(定时器)

介绍 Golang Timer(定时器)

本文介绍Golang Timer(定时器),位于Golang 的time包。常用于衡量代码执行效率。

示例

假设一个业务方法需要衡量其执行效率,整个执行时间不能超过60秒,一旦超过发送通知。

实现一

package main

import (
    "time"
    "fmt"
)

const time_in_seconds = 60

func main() {
    // 60 second timer.
    timer := time.NewTimer(time.Second*time_in_seconds)
    defer timer.Stop()
    
    // 等待定时器完成异步任务
    go func() {
        // 阻塞直到定时器完成。时间到了发送消息给通道 timer.C
        // 该协程中没有其他代码执行
        <-timer.C

        // 如果main() 在60秒之前完成,下面代码不会执行
        fmt.Printf("Congratulations! Your %d second timer finished.", time_in_seconds)
    }
    
    // 执行一个耗时方法
    executeTheCodeThatMightTakeMoreThanSixtySeconds()
    
    // main()函数完成,所以定时器结束.
}

实现二

对上面示例进行重构,抽取定时器为工具函数:

package main

import (
  "time"
  "fmt"
)

const time_in_seconds = 60

func main() {
  // 设定60秒定时器,时间到了调用发送消息函数
  timer := NewTimer(time_in_seconds, func() {
    fmt.Printf("Congratulations! Your %d second timer finished.", time_in_seconds)
  })
  defer timer.Stop()
  
  // 执行一个耗时方法
  executeTheCodeThatMightTakeMoreThanSixtySeconds()
}

// NewTimer创建定时器并运行给定时间,当时间到了调用通知函数
// 最后返回定时器,用于需要时可提前停止定时器
func NewTimer(seconds int, action func()) *time.Timer {
  timer := timer.NewTimer(time.Seconds * time.Duration(seconds))
  
  go func() {
    <-timer.C
    action()
  }
  
  return timer
}

time.AfterFunc

起始time已经提供了工具函数AfterFunc,完全能够实现前节功能:

timer := time.AfterFunc(time.Second*60, func() {
    fmt.Printf("Congratulations! Your %d second timer finished.", time_in_seconds)
})
defer timer.Stop()

总结

本文介绍了Time定时器,结合示例说明time.AfterFunc工具函数的应用场景。同时也涉及了协程、通道等Golang最酷的特性。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值