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)
}
相关推荐
apolloyhl26 分钟前
深入理解 Linux 内核进程管理
linux·运维·服务器·操作系统
沐雨风栉1 小时前
自建云音乐服务器:Navidrome+cpolar让无损音乐随身听
运维·服务器·redis·缓存·docker·容器
德迅云安全-如意1 小时前
你知道服务器和电脑主机的区别吗?
运维·服务器
广州腾科助你拿下华为认证1 小时前
华为HCIE数通考试难度解析
运维·服务器
Clownseven1 小时前
VPS、云服务器、独立服务器的区别是什么?新手服务器选择指南
运维·服务器
跨境小新1 小时前
静态住宅Facebook养号难不难?
运维·服务器
ZYMFZ2 小时前
Linux 防火墙 Iptables
linux·运维·服务器
@CLoudbays_Martin112 小时前
CDN是否能有效检测并且同时防御Ddos 和 CC 攻击?
java·服务器·网络·数据库·git·数据库开发·时序数据库
河南博为智能科技有限公司2 小时前
单串口服务器-工业级串口联网解决方案
运维·服务器·物联网·边缘计算
Rum_0M2 小时前
服务器内部信息获取
运维·服务器·web安全·网络安全·信息安全·职业技能大赛