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