转载请注明出处:

  在 Go 语言中,time.NewTicker 函数用于创建一个周期性触发的定时器。它会返回一个 time.Ticker 类型的值,该值包含一个通道 C,定时器会每隔一段时间向通道 C 发送一个时间值。 NewTicker 函数的签名如下:

func NewTicker(d Duration) *Ticker

  其中,d 是一个表示时间间隔的 time.Duration 类型的值。 使用 NewTicker 的一般步骤如下:

  1. 调用 NewTicker 函数创建一个定时器对象。

  2. 使用 Ticker.C 通道进行循环读取,每次读取都会阻塞直到定时器触发。

  3. 在定时器触发后执行相应的操作。

  下面是一个简单的示例代码,演示了如何使用 NewTicker

package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second) // 创建一个每秒触发一次的定时器
defer ticker.Stop() // 在结束时停止定时器
done := make(chan bool) // 创建一个通道用于结束循环
go func() {
time.Sleep(5 * time.Second) // 等待5秒后结束循环
done <- true
}()
for {
select {
case <-done:
fmt.Println("循环结束")
return
case t := <-ticker.C:
fmt.Println("定时器触发:", t)
// 在这里执行定时器触发后的操作
}
}
}

  在上述代码中,创建了一个每秒触发一次的定时器 ticker。然后使用一个 done 通道来控制循环的结束,在另一个 goroutine 中等待 5 秒后向 done 通道发送数据。在主 goroutine 的循环中,使用 select 语句监听 done通道和 ticker.C通道,如果 done 通道接收到数据,则循环结束;如果 ticker.C 通道接收到数据,则定时器触发,执行相应的操作。

  运行上述代码,每秒钟会打印一次 "定时器触发" 信息,连续打印 5 秒后,程序输出 "循环结束" 并结束循环。这个示例展示了如何使用 NewTicker 创建一个周期性触发的定时器,并在定时器触发后执行相应的操作。

  也可以通过 for 循环遍历ticker 通道进行任务执行,代码示例如下:

package main

import (
"fmt"
"time"
) func main() {
ticker := time.NewTicker(1 * time.Second) // 创建一个间隔为1秒的定时器
defer ticker.Stop() // 在不再需要时停止定时器 go func() {
for range ticker.C {
fmt.Println("Tick at", time.Now())
}
}() time.Sleep(5 * time.Second) // 睡眠5秒,模拟其他工作
}

go NewTicker 得使用的更多相关文章

  1. golang的定时器NewTimer、NewTicker使用

    package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...

  2. GO 定时器NewTimer、NewTicker使用

    package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...

  3. golang开发缓存组件

    代码地址github:cache 花了一天时间看了下实验楼的cache组件,使用golang编写的,收获还是蛮多的,缓存组件的设计其实挺简单的,主要思路或者设计点如下: 全局struct对象:用来做缓 ...

  4. go 的 time ticker 设置定时器

    上示例 package main import ( // "bytes" // "encoding/json" "fmt" // " ...

  5. Go并发编程实践

    前言 并发编程一直是Golang区别与其他语言的很大优势,也是实际工作场景中经常遇到的.近日笔者在组内分享了我们常见的并发场景,及代码示例,以期望大家能在遇到相同场景下,能快速的想到解决方案,或者是拿 ...

  6. Go语言学习笔记(七)杀手锏 Goroutine + Channel

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Gorou ...

  7. GO 语言简介(网摘)

    GO 语言简介 原文出处:[陈皓 coolshell] Hello World 文件名 HELLO.GO package main //声明本文件的package名 import "fmt& ...

  8. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  9. tcp并发服务器(c20w)

    ** 原创文章,请勿转载 ** 并发服务器是一个老生常谈的话题,今天这里也写一个. 1. 目标: 同时在线连接20万(c20w). 开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLA ...

  10. Go基础--goroutine和channel

    goroutine 在go语言中,每一个并发的执行单元叫做一个goroutine 这里说到并发,所以先解释一下并发和并行的概念: 并发:逻辑上具备同时处理多个任务的能力 并行:物理上在同一时刻执行多个 ...

随机推荐

  1. 无法加载 DLL“xxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

    有一台服务器在执行接口的时候遇到了这样一个问题: 其他服务器上都没有这个问题,IIS部署好的项目目录的bin文件夹下是有这个dll的,但却提示无法加载,在网上找了好多帖子,终于发现了问题. 首先用De ...

  2. Binder机制及底层实现

    <1>进程间的内存空间是进程私有的<2>进程间和内核的空间是互通的<3>进程1空间<--->内核空间<-->进程2空间Binder跨进程通信 ...

  3. 数据泵:impdp导入用户ORA-01653

    ,问题描述:在导入一个用户数据的时候,大小为14G左右,导进来的时候卡半天,后来发现是表空间满了,已经恢复了大概6G左右,剩下8G左右没有恢复.此时磁盘剩余19G,加了15G的表空间,磁盘就剩下4G左 ...

  4. $el,$nextTick,$set

    this.$el this.$el DOM的根元素 => 是一个完全唯一的 $el 直到组件挂载完成 (mounted) 之前都会是 undefined. 对于单一根元素的组件,$el 将会指向 ...

  5. C#模拟C++模板特化对类型的值的支持

    概述 C++的模板相比于C#,有很多地方都更加的灵活(虽然代价是降低了编译速度),比如C++支持变长参数模板.支持枚举.int等类型的值作为模板参数. C++支持枚举.int等类型的值作为模板参数,为 ...

  6. [aac @ 0x1dd24c0] Input contains NaN/+-Inf

    ffmpeg编码pcm为aac时报错:[aac @ 0x1dd24c0] Input contains NaN/+-Inf 在./configure选项后面加上下列选项就可以 --enable-enc ...

  7. 用Aspose-Java免费实现 PDF、Word、Excel、Word互相转换并将转换过得文件上传OSS,返回转换后的文件路径

    嘿嘿嘿.嘿嘿,俺又回来了! github代码地址 https://github.com/Tom-shushu/work-study 接口文档有道云 https://note.youdao.com/s/ ...

  8. Java动态调用实体的get方法

    /** * 动态调用实体的get方法(注意返回值) * @param dto 实体 * @param name 动态拼接字段 * @return {@link String} * @date 2021 ...

  9. 2022-10-11:一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b。 给你一组整数区间intervals,请找到一个最小的集合 S, 使得

    2022-10-11:一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b. 给你一组整数区间intervals,请找到一个最小的集合 S, 使 ...

  10. 2020-12-06:mysql中,多个索引会有多份数据吗?

    福哥答案2020-12-06: 数据不会有多份,索引有几个就有几份.聚簇索引存数据和索引,非聚簇索引存索引,聚簇索引只有一个,非聚簇索引可以有多个.