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)
}
相关推荐
禁默几秒前
进程调度的艺术:从概念本质到 Linux 内核实现
linux·运维·服务器
七七powerful2 小时前
sealos 方式安装k8s5节点集群
linux·运维·服务器
五岁小孩2 小时前
Go 原理之 GMP 并发调度模型
golang·gmp·并发调度模型
慌糖3 小时前
Spring Boot音乐服务器项目-查询音乐模块
服务器·spring boot·后端
basketball6163 小时前
Linux C 进程间高级通信
linux·运维·服务器
是小恐龙啊3 小时前
【测试报告】博客系统(Java+Selenium+Jmeter自动化测试)
运维·服务器
北南京海7 小时前
[Linux]进程地址空间
linux·运维·服务器
yzx9910138 小时前
服务器生成图片
运维·服务器
liulilittle10 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
caolib13 小时前
无需云服务器的内网穿透方案 -- cloudflare tunnel
运维·服务器·内网穿透·tunnel·cloudflared