首页 > 其他分享 >分享一个select+定时器的一个代码

分享一个select+定时器的一个代码

时间:2024-11-13 13:45:32浏览次数:1  
标签:11 13 定时器 default 0800 time 分享 select

问题1:下面代码输出什么

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建两个定时器,一个间隔为1秒,另一个间隔为2秒
	ticker1 := time.NewTicker(1 * time.Second)
	ticker2 := time.NewTicker(2 * time.Second)
	// 在一个新的 goroutine 中运行监听逻辑
	go func() {
		for {
			select {
			case t1 := <-ticker1.C:
				fmt.Println("1s ticker:", t1)
			case t2 := <-ticker2.C:
				fmt.Println("2s ticker:", t2)
			default:
				fmt.Println("default")
			}
		}
	}()
	// 主函数运行一段时间
	time.Sleep(5 * time.Second)
	fmt.Println("Done")
}

问题2:如果加上一行代码呢

package main

import (
	"fmt"
	"time"
)

func main() {
	// 创建两个定时器,一个间隔为1秒,另一个间隔为2秒
	ticker1 := time.NewTicker(1 * time.Second)
	ticker2 := time.NewTicker(2 * time.Second)
	// 在一个新的 goroutine 中运行监听逻辑
	go func() {
		for {
			select {
			case t1 := <-ticker1.C:
				fmt.Println("1s ticker:", t1)
			case t2 := <-ticker2.C:
				fmt.Println("2s ticker:", t2)
			default:
				fmt.Println("default")
				time.Sleep(1 * time.Second)
			}
		}
	}()
	// 主函数运行一段时间
	time.Sleep(5 * time.Second)
	fmt.Println("Done")
}

问题1的答案是会一直输出default,直到5s结束

问题2的答案是

default
1s ticker: 2024-11-13 13:37:09.5503567 +0800 CST m=+1.000307501
default
2s ticker: 2024-11-13 13:37:10.5503405 +0800 CST m=+2.000307501
1s ticker: 2024-11-13 13:37:10.5503405 +0800 CST m=+2.000307501
default
1s ticker: 2024-11-13 13:37:11.5503246 +0800 CST m=+3.000307501
default
2s ticker: 2024-11-13 13:37:12.5503087 +0800 CST m=+4.000307501
1s ticker: 2024-11-13 13:37:12.5503087 +0800 CST m=+4.000307501
default
Done

原因

select 语句中的 default 情况会执行是因为 select 语句默认会阻塞,直到其监听的通道中有数据可读。
如果没有通道准备好,select 就不会进入任何一个 case,而是继续阻塞等待。
default 分支没有被设计为在特定条件下退出循环,因此它会不断地打印 "default"

标签:11,13,定时器,default,0800,time,分享,select
From: https://www.cnblogs.com/qcy-blog/p/18543761

相关文章

  • 海康私有化视频平台EasyCVR大华乐橙设备私有平台视频监控系统知识分享:视监控画面有黑
    在现代安防监控领域,高清视频的接入和传输是确保监控系统效能的关键。EasyCVR安防监控视频系统,以其先进的网络传输技术和对大规模、高并发远程监控需求的满足,成为安防监控系统中的佼佼者。该系统不仅支持高清视频的接入和传输,还具备解决监控画面问题和提供关键技术支持的能力。本文......
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
    本文为大家整理了墨天轮数据社区2024年10月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等,分享给大家:Oracle优质技术文章概念梳理&安装配置OracleR......
  • 如何在忘记密码的情况下解锁 iPhone? 6 种方法分享
    您是否因为没有密码而无法解锁您的iPhone?别担心,这种情况比你想象的更常见!忘记密码是iPhone用户面临的最常见问题之一,而且可能非常令人沮丧-但不要绝望。在这篇文章中,我们将与您分享绕过iPhone屏幕密码的6种最佳方法。所以请坐下来,放松,让我们指导您如何轻松掌握解锁......
  • HBase基础知识分享(一)
    写在前面今天来学习Hbase部分的知识!Zookeeper的ZAB协议ZAB(ZookeeperAtomicBroadcast)协议是Zookeeper的核心协议之一,用于保证集群中数据的一致性、顺序性和容错性。它包括以下几个关键阶段:Leader选举:选举出一个Leader节点来协调集群内的操作。事务提案:客户端提交的事务会......
  • 【论文分享】三维景观格局如何影响城市居民的情绪
    本次带来一篇SCI论文的全文翻译!该论文以上海LivingLine项目为例,探索利用时空Wi-Fi数据分析街道层面的城市活力。【论文题目】Understandingstreet-levelurbanvibrancyviaspatial-temporalWi-Fidataanalytics:CaseLivingLineShanghai【题目翻译】利用时空Wi-Fi数......
  • 【数据分享】2000-2023年我国1km分辨率的逐日O3栅格数据
    空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2023年全国范围逐日的PM2.5栅格数据、2013-2023年全国范围逐日SO2栅格数据、2000-2023年全国范围逐日PM10栅格数据(均可查看之前的文章获悉详情)!本次我们给大家带来的是2000-2023年全国范围的逐日的O3栅......
  • 【数据分享】2024年我国各城市公交站点与线路数据
    公交线路与站点数据是我们做城市研究时经常会用到的基础数据。那么去哪里获取该数据呢?今天,我们就给大家分享一份2024年11月采集的全国所有城市的公交站点与线路数据,数据格式为shp矢量格式,数据坐标为wgs1984地理坐标。数据来源于开源公交信息查询网站。大家可以在公众号回复关......
  • 吉客云与用友BIP数据无缝对接案例分享
    吉客云数据集成到用友BIP的技术案例分享在企业日常运营中,数据的高效流转和准确对接是实现业务流程自动化的重要环节。本文将聚焦于一个具体的系统对接集成案例:吉客云-调拨出库--->YS-其他出库单-OK,详细探讨如何通过轻易云数据集成平台,将吉客云的数据无缝集成到用友BIP系统中。首......
  • 用PNGMaker.io快速生成透明PNG图像——使用者分享体验
    摘要:PNGMaker.io是一个在线的免费PNG制作工具,可以轻松将文字转换成透明背景的PNG图像,适合各类设计需求。在日常设计工作中,我们常常需要透明背景的PNG图像,但要用专业设计软件制作,步骤多且费时。最近我试用了PNGMaker.io,它可以在线、免费地生成带透明背景的PNG图像,操作简单,效果也......
  • 2.基本的SELECT语句
    #列出数据库showdatabases;#创建数据库createdatabasedbtest;1.SQL分类DDL:数据定义语言CREATE、DROP、ALTER、RENAME、TRUNCATEDML*:数据操作语言INSERT、DELETE、UPDATE、SELECTDCL:数据控制语言GRANT、REVOKE、ROLLBACK、COMMIT、SAVEPOINT2.导入数据方式一:基......