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)
}
相关推荐
ling-456 小时前
Linux-day09 11
linux·运维·服务器
zbguolei6 小时前
Debian提示:“用户名” 不是 sudoers 文件
linux·服务器·debian
zhangdawei8387 小时前
英伟达GB200,GB300和普通服务器如dell R740xd有什么区别?
运维·服务器·人工智能
糖~醋排骨7 小时前
FW防火墙的配置
linux·服务器·网络
2301_780943848 小时前
linux 对文件打补丁(Patch)
linux·运维·服务器
Lam㊣8 小时前
服务器端口转发的方法
linux·服务器
ChangYan.8 小时前
Windows命令行(cmd)下快速查找文件路径(类似Linux下find命令)
linux·运维·服务器
tao3556678 小时前
VS Code登录codex,报错(os error 10013)
java·服务器·前端
DICOM医学影像8 小时前
1. go语言从零实现以太坊客户端-JSON-RPC
golang·区块链·solidity·以太坊·web3.0·json-rpc·erc20
小杰帅气8 小时前
神秘的环境变量和进程地址空间
linux·运维·服务器