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)
}
相关推荐
Clarence Liu1 小时前
golang 剖析 sync包
开发语言·golang
老蒋新思维1 小时前
创客匠人:小团队的知识变现革命 —— 超级个体 + 多智能体如何重构组织价值
服务器·网络·人工智能·重构·创始人ip·创客匠人·知识变现
qq_310658511 小时前
mediasoup源码走读(十一)——consumer
服务器·c++·音视频
古城小栈1 小时前
Go mod 忽略指令:解决依赖冲突的核心技巧
网络·golang
Sleepy MargulisItG2 小时前
【Linux网络编程】应用层自定义协议与序列化
linux·服务器·网络·网络协议·tcp/ip
Kiri霧2 小时前
Go Defer语句详解
java·服务器·golang
咕噜签名-铁蛋2 小时前
阿里云飞天操作系统:云时代的技术基石与创新引擎
服务器
zhuzewennamoamtf2 小时前
Linux设备树理解和应用
linux·运维·服务器
锥锋骚年2 小时前
golang 开发 Redis与Memory统一接口方案
开发语言·redis·golang