首页 > 其他分享 >go time的定时器简单总结

go time的定时器简单总结

时间:2023-01-04 11:00:48浏览次数:41  
标签:定时器 fmt After tchan 给定 time go

go的标准库中的time包为我们提供了多个定时器的接口,总共分为以下几个:

  • time.After,到了给定的duration的时间时,返回可读chan,也不会阻止程序运行,相当于一个消息通知
  • time.Sleep,在给定的duration中,阻塞当前goroutine,过了休眠时间,goroutine继续运行
  • time.Tick,每隔给定的duration,返回一个chan作为消息通知,除非外在stop,否则一直运行
  • time.Ticker,与Tick的不同就是,提供了Stop接口,在给定时间到达后,Ticker会停止

根据不同的应用场景进行选择。

下面给出简单的应用代码,仅供参考:

package main

import (
	"fmt"
	"time"
)

func main()  {
	// 1. time.After, only read tchan will block
	fmt.Println("time.After test...")
	tchan := time.After(1 * time.Second)

	fmt.Println(time.Now().String())
	fmt.Println(time.Now().String(), "tchan=", <-tchan)
	fmt.Println(time.Now().String())
	
	// 2. time.Sleep
	fmt.Println("\ntime.Sleep test...")
	fmt.Println(time.Now().String())
	time.Sleep(5 * time.Second)
	fmt.Println(time.Now().String())

	// 3. time.Tick, every d will recv time.Time, cannot stop by self
	fmt.Println("\ntime.Tick test...")
	/*
	c := time.Tick(2 * time.Second)
	for next := range c {
		fmt.Println(next)
	}
	*/

	// 4. time.Ticker, like time.Tick, but can stop
	fmt.Println("\ntime.Ticker test...")
	ticker := time.NewTicker(1 * time.Second)
	defer ticker.Stop()
	done := make(chan bool)

	// after 5 seconds, stop
	go func() {
		time.Sleep(5 * time.Second)
		done <- true
	}()

	// loop for ticker
	for {
		select {
		case <- done:
			fmt.Println("done!")
			return
		case t := <- ticker.C:
			fmt.Println("Current time:", t)
		}
	}

}

标签:定时器,fmt,After,tchan,给定,time,go
From: https://www.cnblogs.com/davis12/p/17024268.html

相关文章

  • [Godot] 网络物体的同步
    网络物体的同步方案服务器客户端初始化服务器初始化客户端通知游戏开始 生成网络物体老鼠,分配nid记录老鼠的资源路径  连接服务器客户......
  • Shank's Baby-Step-Giant_Step Algorithm(BSGS)
    解模方程(\(n\)为素数)\[a^x\equivb(\bmodn)\]因为欧拉定理\(a^{\phi(n)}\equiv1(\bmodn)\)(\(n\)为素数)。有\[0\lex\len-1\]设\(m=\sqrt{n+......
  • datetime 格式化日期的符号
    %y两位数的年份表示(00-99)%Y四位数的年份表示(000-9999)%m月份(01-12)%d月内中的一天(0-31)%H24小时制小时数(0-23)%I12小时制小时数(01-12) %M分钟数(00=59)%S秒(00-59) %a本地......
  • 如何创建Django项目
    创建Django项目前置条件:已完成Python环境和PyCharm安装|在命令行输入pip命令安装pipinstall-ihttps://pypi.douban.com/simpledjango或指定相应的django版本:......
  • go get / go install 配置系统代理(centos 7)
    在goget或者goinstall时,代理报错,比如proxyconnecttcp:dialtcp:lookup3128:nosuchhostdialtcp:lookup proxy.golang.com.cn on8.8.4.4:53:readudp192......
  • (1055, "'bbs02.app01_category.name' isn't in GROUP BY")
    后台报错:[err]1055--'xxx'isn'tinGROUPBY解决方案:初步判断是数据库(版本?配置?)的问题进入mysql的my.ini配置文件ctrl+f搜索找到字段:ONLY_FULL_GROUP_BY,将其删除......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成
    Swagger是什么?Swagger是一个规范且完整API文档管理框架,可以用于生成、描述和调用可视化的RESTful风格的Web服务。Swagger的目标是对RESTAPI定义一个标准且和语......
  • 解决国内使用Google搜索引擎
    1.下载IGG谷歌访问助手,然后对文件解压,如下图。  2.将此扩展配置到GoogleChrome浏览器中。打开扩展程序  打开开发者模式 将扩展文件拖入此页面 ......
  • Django-restframework
    环境安装与配置DRF需要以下依赖:Python(3.5以上)Django(2.2以上)DRF是以Django子应用的方式提供的,所以我们可以直接利用已有的Django环境而无需重新创建。安装DRF......
  • @AspectJ support (good)
    AspectJ类型匹配的通配符:*:匹配任何数量字符;..:匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。+:匹配指定类型的子类型;仅能作为......