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)
}
相关推荐
白榆!4 分钟前
Linux 基本指令入门:从基础操作到实战应用
linux·运维·服务器
kyle~8 分钟前
CPU调度---协程
java·linux·服务器·数据库·c++20
IDOlaoluo8 分钟前
SQL Server 2017 Developer 中文版安装教程(64位 ISO 文件详细步骤)
服务器·数据库·负载均衡
宁雨桥1 小时前
基于 Debian 服务器的前端项目部署完整教程
服务器·前端·debian
宁雨桥2 小时前
Debian 服务器环境搭建全指南:从工具选型到项目部署实战
运维·服务器·debian
一匹电信狗2 小时前
【C++】红黑树详解(2w字详解)
服务器·c++·算法·leetcode·小程序·stl·visual studio
任风雨2 小时前
附录I Linux命令一览
linux·服务器
@爱学习的小趴菜2 小时前
Redis服务器配置
服务器·数据库·redis
kyle~2 小时前
原子性与原子操作
运维·服务器·开发语言·c++
黄金旺铺2 小时前
Linux 命令与运维终极手册(2025 完整版)
linux·运维·服务器