golang中的定时器
定时器
type Timer struct {C<-chan Timer runtimeTimer
}
Timer
一个定时器,代表未来的一个单一事件,你可以告诉timer你要等待多长时间,它提供一个channel,在将来的那个时间channel提供了一个时间值
延时
time.NewTimer时间到了,只响应一次
func main() {//time.NewTimer时间到了,只响应一次//创建一个定时器,设置时间为2s,2s后,往time通道写内容(当前时间)timer := time.NewTimer(2 * time.Second)fmt.Println("当前时间: ", time.Now())//2s后,往timer.c写数据,有数据后,就可以读取t := <-timer.C //channel没有数据前后阻塞fmt.Println("t = ", t)
}
time.After(2 * time.Second)延迟多少秒产生个事件
func main() {//定时2秒,2秒后产生一个事件,往channel里面写内容<-time.After(2 * time.Second)fmt.Println("时间到")
}
停止
关闭定时器,定时器就不起作用了
func main() {timer := time.NewTimer(3 * time.Second)go func() {<-timer.Cfmt.Println("子协程可以打印了,因为定时器的时间到了")}()//关闭定时器timer.Stop()for {}
}
重置
func main() {timer := time.NewTimer(3 * time.Second)//重置上面的那个无效flag := timer.Reset(1 * time.Second)fmt.Println(flag) //true<-timer.Cfmt.Println("时间到")
}
Ticker
定时触发的计时器,它会以一个间隔(interval)往channel发送一个事件(当前时间),而channel的接收者可以以固定的时间间隔从channel中读取事件
func main() {ticker := time.NewTicker(1 * time.Second)i := 0for {<-ticker.Ci++fmt.Println("i = ", i)if i ==5 {//停止tickerticker.Stop()break}}
}
不断取出数据
intChan2 := getIntChan()
for elem := range intChan2 {fmt.Printf("The element in intChan2: %v\n", elem)
}
我把调用getIntChan得到的结果值赋给了变量intChan2,然后用for语句循环地取出了该通道中的所有元素值,并打印出来。
这里的for语句也可以被称为带有range子句的for语句。它的用法我在后面讲for语句的时候专门说明。现在你只需要知道关于它的三件事。
一、这样一条for语句会不断地尝试从intChan2种取出元素值,即使intChan2被关闭,它也会在取出所有剩余的元素值之后再结束执行。
二、当intChan2中没有元素值时,它会被阻塞在有for关键字的那一行,直到有新的元素值可取。
三、假设intChan2的值为nil,那么它会被永远阻塞在有for关键字的那一行。
这就是带range子句的for语句与通道的联用方式。不过,它是一种用途比较广泛的语句,还可以被用来从其他一些类型的值中获取元素。除此之外,Go 语言还有一种专门为了操作通道而存在的语句:select语句
golang中的定时器相关推荐
- Golang中WaitGroup、Context、goroutine定时器及超时学习笔记
原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...
- golang延时_Golang 定时器底层实现深度剖析
本文将基于 Golang 源码对 Timer 的底层实现进行深度剖析.主要包含以下内容: 1. Timer 和 Ticker 在 Golang 中的底层实现细节,包括数据结构等选型. 2. 分析 ti ...
- Golang当中的定时器
定时器 前言 定时器的基本使用 前言 在平时写代码的时候,我们经常会遇到在将来某个时间点或者间隔一段时间重复执行函数.这个时候我们就可以考虑使用定时器.本片文章主要介绍一下golang当中的几个常用的 ...
- Golang中Buffer高效拼接字符串以及自定义线程安全Buffer
本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...
- 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...
- java怎么加定时器_JAVA WEB程序中添加定时器
JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...
- go语言的iota是什么意思_关于Golang中的iota
快速一览 iota是Golang中提供的一个简化常量和枚举编程的标识符,合理的使用这个标识符可以让代码变得更简洁,省去大量的不必要的代码. 比如下面的这个常量定义 const ( a = 1 b = ...
- Golang中的panic和recover(捕获异常)
Golang中的panic和recover(捕获异常) 参考文章: (1)Golang中的panic和recover(捕获异常) (2)https://www.cnblogs.com/zhzhlong ...
- golang 中string和int类型相互转换
总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: test_int, err := strconv.Atoi(test_string) if err != ni ...
最新文章
- leetcode每日一题系列——797. 所有可能的路径
- 20145129 《Java程序设计》第6周学习总结
- 天鹅给癞蛤蟆的回信[转贴]
- 小功能隐藏着大学问---windows的ACL带来的挑战
- 2021HDU多校8 - 7059 Counting Stars(线段树)
- 为何采用双亲委派机制
- Android小数和整数相互转换
- c# 联合halcon 基于相关性 模板匹配_机器视觉之halcon入门(5)-字符识别exe生成...
- CloudIDE插件在手,按时下班不愁
- bzoj1853幸运数字——容斥原理
- PE接受失败:一场被迫发生的行业革命
- 【大云制造】公有云产品及解决方案V4.0——全新面貌,重新出发
- 电脑键盘下划线怎么打_苹果电脑键盘失灵怎么办,维护方法!
- ILRuntime入门11 LitJson
- java线性规划_线性规划的代码实现
- K8S 数据卷volumes之ConfigMap
- Contour Features 边界特征
- 网站推广(百度百科)
- Ubuntu18.04打开优化设置界面
- Linux下配置C语言编程环境