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)
}
相关推荐
数据知道12 分钟前
Go基础:一文掌握Go语言泛型的使用
开发语言·后端·golang·go语言
liulilittle1 小时前
Linux内核网络优化:两个网络调优解决方案
linux·运维·服务器·网络·内核·信息与通信·通信
hweiyu001 小时前
Linux运维实战:系统及服务管理(视频教程)
linux·运维·服务器
福如意如我心意2 小时前
ubuntu服务器重启,xinference自动加载模型脚本
服务器·ubuntu·ai
柳鲲鹏3 小时前
交叉编译:strip: Unable to recognise the format of the input file xx.c.o
linux·运维·服务器
QX_hao3 小时前
【Go】--数据类型
开发语言·后端·golang
h7997103 小时前
redis lua脚本(go)调用教程以及debug调试
redis·golang·lua
趣味编程1113 小时前
go的学习2---》并发编程
学习·golang·perl
Le1Yu3 小时前
微服务拆分以及注册中心
linux·运维·服务器
moxiaoran57534 小时前
nginx中proxy_pass配置
运维·服务器·nginx