首页 > 其他分享 >临时存储代码

临时存储代码

时间:2024-07-03 23:09:17浏览次数:1  
标签:存储 Set Header 临时 代码 Writer ctx dataChan

代码临时存储

func main() {
	r := gin.Default()

	r.GET("/stream", func(ctx *gin.Context) {
		ctx.Writer.Header().Set("Content-Type", "text/event-stream")
		ctx.Writer.Header().Set("Cache-Control", "no-cache")
		ctx.Writer.Header().Set("Connection", "keep-alive")
		dataChan := make(chan string)
		defer close(dataChan)
		go generateData(ctx, dataChan)

		for {
			select {
			case <-ctx.Request.Context().Done():
				fmt.Println("Done")
				return
			case data := <-dataChan:
				fmt.Println(data)
				ctx.Writer.WriteString("data: " + data + "\n")
				ctx.Writer.Flush()
				// ctx.Writer.(http.Flusher).Flush()
			case <-time.After(10 * time.Second):
				ctx.Writer.WriteString(": comment\n")
				ctx.Writer.Flush()
			}
		}
	})

	// 优雅退出
	// go func() {
	// 	signalChan := make(chan os.Signal, 1)
	// 	signal.Notify(signalChan,
	// 		syscall.SIGINT,  // 中断信号
	// 		syscall.SIGTERM, // 终止信号
	// 	)
	// 	<-signalChan
	// 	fmt.Println("Quit")
	// 	os.Exit(0)
	// }()

	r.Run("0.0.0.0:8080")

}

func generateData(ctx *gin.Context, dataChan chan string) {
	// 模拟生成数据的过程,将数据写入通道中
	for i := 0; i < 10; i++ {
		select {
		case <-ctx.Request.Context().Done():
			fmt.Println("gorountine done")
			return
		default:
			data := fmt.Sprintf("data %d", i+1)
			// 将数据写入通道中
			dataChan <- data
			time.Sleep(1 * time.Second)
		}
	}
}

标签:存储,Set,Header,临时,代码,Writer,ctx,dataChan
From: https://www.cnblogs.com/bamlubi/p/18282729

相关文章

  • 微信小程序-详细登录流程 - (图解+代码流程)
    目录项目准备     注册小程序和创建项目一、登录页面效果图头部区域头部区域代码展示布局组件和图片组件的使用弹性布局display:flex;登录内容区域登录内容区域代码展示bindsubmit="uplogin"代码注解切换登录区域切换登录区域代码展示<radio-group/><radio/>......
  • JSOI2017 代码
    \(\text{JSOI2017day1t1代码}\)题解设\(d_i\)表示长度为\(i\)的库函数数量,\(h_i\)表示长度为\(i\)的可编译代码的数量,\(f_{i,j}\)表示寄存器初始值为\(j\)、终值为\(0\)的代码数量,\(F_{i,j}\)表示寄存器初值为\(0\)、终值为\(j\)的代码数量,\(g_{i,j}\)表示长度为\(i\)可以加上......
  • 代码随想录算法训练营第四十八天 | 188.买卖股票的最佳时机IV 309.买卖股票的最佳时
    188.买卖股票的最佳时机IV题目链接文章讲解视频讲解动规五部曲:dp数组的含义:dp[j][2*i-1]表示第i次持有股票dp[j][2*i]表示第i次不持有股票递推公式:dp[j][2i-1]=max(dp[j-1][2i-1],dp[j-1][2*i-2]-prices[j]);dp[j][2i]=max(dp[j-1][2i],dp[j-1][2*i-1]......
  • 代码随想录第四十六天 | 322. 零钱兑换,279.完全平方数,139.单词拆分
    322.零钱兑换看完想法:此处是求最小值,所以递推公式中含Min,即dp[j]=min(d[[j],dp[j-coins[i]]+1),初始化都为INT_MAX,且dp[0] =0。由于不是求组合数,所以物品和背包重量的遍历先后顺序都是可以的。此处要注意一个细节,如果是物品for外循环,背包从coins[j]开始并且j++,(之......
  • Python学习笔记27:进阶篇(十六)常见标准库使用之质量控制中的代码质量与风格第一部分
    前言本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。根据模块知识,一次讲解单个或者多个模块的内容。教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html质量控制质量控制(QualityControl,QC),主要关注于提高......
  • 编译原理 第六章&编译原理必考大题: 语义分析及中间代码生成&必考大题语句翻译
    第六章语义分析及中间代码生成&必考大题语句翻译文章目录第六章语义分析及中间代码生成&必考大题语句翻译写在最前6.1语义分析6.2中间代码6.2.1逆波兰式6.2.2四元式6.2.3三元式6.3语句翻译(必考大题)6.3.1布尔表达式的翻译6.3.2if语句的翻译6.3.3while语句翻......
  • 代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素
    704.二分查找这个之前有写过,最重要的就是把握住要去搜索的区间的形式,包括左闭右闭以及左闭右开两种classSolution{publicintsearch(int[]nums,inttarget){intleft=0,right=nums.length;while(left<right){//左闭右开的版本,结果存储......
  • 手把手教你如何用python写一个经典小游戏(仅需100行以内的代码)
    创作灵感小时候也就是大概十几年前的时候,智能触屏手机还未大量普及,移动网络还是2G,大部分人用的都是小灵通,里面只有几款经典的游戏,比如俄罗斯方块,贪吃蛇等。还记得以前自己玩的不亦乐乎。如今网络发展迅速,通讯设备越来越智能化,集成化,这些上世纪的经典游戏似乎早已淡忘人们的视......
  • 代码训练营 DAY4打卡
      本文由GarfieldTheOldCat原创,转载请标明dekkyandlappy-CSDN博客今天学习了链表的第二课时,链表基础内容在代码训练营DAY3打卡 本文由GarfieldTheOldCat原创,转载请标明两两交换链表中的节点这道题目的第一个难点在于对题目意思的理解,什么是两两交换?举个例子:【A,B,C,D】......
  • Gitlab代码管理工具安装配置
    前言:没有真正的证书与域名建议使用http+ip的方式在内网使用,不建议使用假的域名地址一、安装前配置#更改主机域名hostnamectlset-hostnamegitlab.dome.combash#配置hosts底部添加下面内容vim/etc/hosts############################ipgitlab.dome.com########......