首页 > 其他分享 >go select case的一个小坑

go select case的一个小坑

时间:2024-08-03 17:19:04浏览次数:11  
标签:case 返回 time go tick select

业务背景

image

之前在写很多if else时,对于不符合的分支条件总是习惯提前返回,减少对后面分支的心智负担,
最近在写1个go项目时,对于比较少使用go,在for select结构里遇到错误返回,导致直接返回了,后续tick就无效了

代码抽离简化如下

func Consumer() {
	tick := time.NewTicker(time.Duration(1000) * time.Millisecond)
	defer tick.Stop()
	n := 0
	for {
		select {
		case <-tick.C:
			msg := fmt.Sprintf("ticked:%s,n=%d", gtime.Now().String(), n)
			fmt.Println(msg)
			time.Sleep(2 * time.Second)
			n++
			//这里模拟出错,
			if n == 3 {
				fmt.Println(n)
				return
			}
			//后续处理
			//很多代码
		}

	}
	fmt.Println("end")
}

func TestConsume(t *testing.T) {
	go Consumer()
	time.Sleep(20 * time.Second)
}

代码执行到return 后,整个就返回了,后续的tick再也不起作用了,导致我的gqueue不能正常消费

标签:case,返回,time,go,tick,select
From: https://www.cnblogs.com/HKUI/p/18340813

相关文章

  • 实现一个终端文本编辑器来学习golang语言:第一章项目构建
    欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。更多介绍见https://www.cnblogs.com/Ama2ingYJ/p/18340634这里我把我们的文本编辑器项目命名为zedterm。首先第一步自然是初始化golang工程gomodinitzedterm作为文本编辑器,其中重要的一个工作便是......
  • 实现一个终端文本编辑器来学习golang语言
    欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。首先想说说写这个系列文章的动机。其实作为校招生加入某头部互联网大厂一转眼已经快4年了。可以说该大厂算是比较早的用golang语言作为主要后端开发技术栈的公司了,绝大部分后端项目的语言选型都是golang......
  • 在django中以一对一的关系保存表单数据
    我与Django用户模型和自定义配置文件模型具有一对一的关系。我尝试在用户注册时同时保存用户和个人资料数据。但问题是配置文件模型的数据未验证且数据未保存在数据库中这是代码model.pyclassProfile(models.Model):user=models.OneToOneField(User,on_delete=......
  • go-zero 微服务框架集成 gorm 实操
    目录1.config的结构体2.配置文件声明3.添加svcContext4.定义你的相关表或者模型作为服务,肯定要和数据库交互的,所以在go-zero框架里集成数据库的操作是必不可少的,今天看看go-zero的rpc应用如何集成gorm框架。总体的思路分这几步:定义你的配置项结构体定义你的配置......
  • 第一个Django工程创建及运行
    认识DjangoDjango是一个高级PythonWeb框架,它鼓励快速开发和简洁、实用的设计。它由经验丰富的开发人员构建,解决了Web开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的。快得离谱。Django旨在帮助开发人员尽快将应用程序从概念到......
  • 计算机毕业设计django+vue博物馆信息系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着科技的飞速发展和人们对文化生活的追求日益提升,博物馆作为连接过去与未来的桥梁,其信息化建设已成为不可逆转的趋势。传统的博物馆管理......
  • GO语言 4 收集器
    劳苦功高的数组声明数组并访问其元素以下数组不多不少正好包含8个元素varplanets[8]string同一个数组中的每个元素都具有相同的类型,比如以上代码就是由8个字符串组成,简称字符串数组。数组的长度可以通过内置的len函数确定。在声明数组时,未被赋值的元素将包含......
  • 02 Go语言操作MySQL基础教程_20240729 课程笔记
    概述如果您没有Golang的基础,应该学习如下前置课程。Golang零基础入门Golang面向对象编程GoWeb基础Go语言开发RESTAPI接口_20240728基础不好的同学每节课的代码最好配合视频进行阅读和学习,如果基础比较扎实,则阅读本教程巩固一下相关知识点即可,遇到不会的知识点再看视频......
  • go-zero 使用 redis 作为 cache 的 2 种姿势
    在go-zero框架内,如在rpc的应用service中,其内部已经预置了redis的应用,所以我们只需要在配置中加入相关字段即可,另外,在svcContext声明redisclient后即可在具体的业务逻辑处理中应用。但这里有个问题,如我用的是go-zero1.5.0版本,从源码分析来看,redis的连接并没用到......
  • EGO-Swarm仿真环境搭建
    EGO-Swarm仿真环境搭建参考教程:https://github.com/ZJU-FAST-Lab/ego-planner-swarmEGO-Swarm是一种分散的异步系统解决方案,用于仅使用机载资源在未知的障碍物丰富的场景中进行多机器人自主导航。1.查看系统环境要运行本仿真程序,需要保证当前环境为ubuntu18.04+ros-melodic......