【发布时间】:2021-04-23 06:06:03
【问题描述】:
您好,我有以下简单的程序:
我有一个函数printNums(nums chan int),它应该从一个通道中获取 3 个数字并同时打印它们。每次打印都在 range 语句内的新 goroutine 中完成。
然而,当我运行这个程序时,我得到的是12, 12, 32,而不是预期的输出4, 12, 32。你能帮我找出问题出在哪里,为什么我没有从频道收到与发送到频道相同的值吗?谢谢。
package main
import ("fmt")
func printNums(nums chan int){
c := make(chan struct{}, 100)
for num := range(nums){
go func(){
fmt.Println(num)
c <- struct{}{}
}()
}
<-c
<-c
<-c
}
func main(){
nums := make(chan int)
go func() {
nums <- 4
nums <- 12
nums <- 32
close(nums)
}()
printNums(nums)
}
【问题讨论】:
-
看起来你的
c频道是一个临时的等待组gobyexample.com/waitgroups
标签: go concurrency range channel goroutine