首页 文章 Go语言基础 介绍 Golang Timer(定时器)
0
0
0
28

介绍 Golang Timer(定时器)

定时器 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最酷的特性。

到此这篇关于“介绍 Golang Timer(定时器)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章

创建博客

开始创作
写作能提升自己能力,也能为他人分享知识。

在线教程

查看更多
  • Go入门指南

    Go入门指南

  • Go语言高级编程

    Go语言高级编程

  • Go Web 编程

    Go Web 编程

  • GO专家编程

    GO专家编程

  • Go语言四十二章经

    Go语言四十二章经

  • 数据结构和算法(Golang实现)

    数据结构和算法(Golang实现)

Go语言编程网

微信扫码关注订阅号


博客 资讯 教程 我的