【发布时间】:2019-08-06 12:31:46
【问题描述】:
我正在尝试从here 修改的代码。我创建 5 个通道并发送数据 5 次:
package main
import "fmt"
func greet(c chan string) {
fmt.Println("Hello " + <-c + "!")
}
func main() {
fmt.Println("main() started")
c := make(chan string)
for i:=0; i<5; i++ {
go greet(c)
}
c <- "AAA"
c <- "BBB"
c <- "CCC"
c <- "DDD"
c <- "EEE"
fmt.Println("main() stopped")
}
我希望打印所有 5 个字符串。但是,我发现可变输出。一些输出是:
$ ./rnchannel
main() started
Hello AAA!
Hello DDD!
Hello BBB!
Hello CCC!
Hello EEE!
main() stopped
$ ./rnchannel
main() started
Hello CCC!
Hello DDD!
main() stopped
$ ./rnchannel
main() started
Hello CCC!
Hello BBB!
Hello AAA!
Hello DDD!
main() stopped
为什么要打印可变数量的行?
【问题讨论】: