我想了解频道在 golang 中的工作方式。我的代码非常简单,但输出却令人惊讶。
正如文档所述:从通道读取和写入通道会阻塞当前的 goroutine,因此我认为写入通道会阻塞通道,直到主例程产生为止。
package main
func rtn(messages chan<- string) {
defer close(messages)
println("p1")
messages <- "ping1"
//for i := 0; i < 10000000; i++ { }
println("p2")
messages <- "ping2"
}
func main() {
messages := make(chan string)
go rtn(messages)
for msg := range messages {
println(msg)
}
}
我以为它会打印
p1
ping1
p2
ping2
但它实际上打印
p1
p2
ping1
ping2
森林海
相关分类