Go语言并发编程:通道、竞态条件与高级特性
1. 通道基础操作
1.1 从关闭的通道读取数据
当尝试从关闭的通道读取数据时,会得到该通道数据类型的零值。例如以下代码:
fmt.Println(<-ch)
在一个循环中从关闭的通道读取数据不会引发问题。运行 channels.go 代码,输出结果包含 Exit. 、 Read: 10 等信息。在使用 writeToChannel(c, 10) 向通道写入值 10 后,能将该值读取回来。通道关闭后,后续的循环读取会输出通道类型的零值。
1.2 读写关闭通道的不同情况
读取关闭的通道会返回其数据类型的零值,但向关闭的通道写入数据会导致程序崩溃(panic)。以下代码展示了相关操作:
func main() {
willClose := make(chan complex64, 10)
// Write some data to the channel
willClose <- -1
willClose <- 1i
// Read data and empty channel
<-willClose
<-willClose
close(willClose)
// Read agai
超级会员免费看
订阅专栏 解锁全文
169

被折叠的 条评论
为什么被折叠?



