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


代码
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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/288394.html

(0)
上一篇 2022年9月9日
下一篇 2022年9月9日

相关推荐

发表回复

登录后才能评论