Go协程,用通道传输数据

Go协程,用通道传输数据

bash 复制代码
func GolistChanTest() {
 
	loopTimes := 10
	log.Infof("start")  
	gn := make(chan int, 2)
	listChan:= make(chan map[int]string, int(loopTimes))
	wg := sync.WaitGroup{}
	loopEndTime := loopTimes - 1
	for i := 0; i < int(loopTimes); i++ {
		wg.Add(1)
		gn <- 1

		go func(page int) {
			defer func() {
				wg.Done()
				<-gn
			}()

			list := make(map[int]string)

			for i := 0; i < 10; i++ {
				list[page*10+i] = fmt.Sprintf("=%d*10+%d", page, i)
			}

			listChan<- list

			if loopEndTime <= page {
				close(listChan)
			}

			time.Sleep(300 * time.Millisecond)

		}(i)
	}

	result := make(map[int]string, 0)
	for num := range listChan{ // 从通道中读取数据,直到通道关闭
		for key, value := range num {
			result[key] = value 
		}
	}

	wg.Wait()
	close(gn)

	log.Infof("result :%+v", result)
}
相关推荐
PC2005-cloud41 分钟前
博文已索引但不展示:一次 Bing SEO 问题排查记录
服务器·人工智能
沸速存储1 小时前
整机瓶颈判断思路,自上而下定位卡顿根源
运维·服务器·电脑·内容运营
乌萨奇也要立志学C++1 小时前
【Linux】网络基础 从零理解网络通信:局域网、跨网传输与 Socket 预备知识
linux·服务器·网络
xcLeigh3 小时前
Go入门:变量声明的五种方式详解
java·开发语言·golang
2601_965798475 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
蚰蜒螟6 小时前
从内核源码看Linux启动:chroot、execve与MS_MOVE的协奏曲
linux·服务器·网络
来者皆善7 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
缓慢更新8 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器
Dawn-bit8 小时前
Linux磁盘分区与Swap和磁盘故障查询
linux·运维·服务器·网络·云计算
梦想三三8 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv