ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GO语言自学_018_for_range防止读写不对应导致的死锁

2022-09-09 03:32:20  阅读:201  来源: 互联网

标签:读取数据 avoid 写入 range gosetup go 死锁 018


代码
package main

import "fmt"

func main() {
	numsChan := make(chan int, 10)

	// 写入
	go func() {
		for i := 1; i <= 50; i++ {
			numsChan <- i
			fmt.Println("写入:", i)
		}
		fmt.Println("数据全部写完毕,准备关闭管道")
		close(numsChan)
		fmt.Println("管道已关闭!")
	}()

	/*
		遍历管道时,只返回一个值
		for rage不知道管道已经写完,所以一直等待。所以这边,我们要关闭写的管道,for range才会继续往下走。
	*/
	for v := range numsChan {
		fmt.Println("读取数据", v)
	}
	fmt.Println("程序正常结束!")
}

结果
GOROOT=C:\Program Files\Go #gosetup
GOPATH=C:\gowork #gosetup
"C:\Program Files\Go\bin\go.exe" build -o C:\Users\ASUS\AppData\Local\Temp\GoLand\___go_build_018_read_channel_avoid_deadlock_go.exe C:\gowork\src\018_read_channel_avoid_deadlock.go #gosetup
C:\Users\ASUS\AppData\Local\Temp\GoLand\___go_build_018_read_channel_avoid_deadlock_go.exe
读取数据 1
写入: 1
写入: 2
写入: 3
读取数据 2
读取数据 3
读取数据 4
写入: 4
写入: 5
数据全部写完毕,准备关闭管道
管道已关闭!
读取数据 5
程序正常结束!

Process finished with the exit code 0

标签:读取数据,avoid,写入,range,gosetup,go,死锁,018
来源: https://www.cnblogs.com/cloucodeforfun/p/16671355.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有