golang chanel未与sync.WaitGroup一起工作

golang chanel未与sync.WaitGroup一起工作,go,async-await,Go,Async Await,我的代码 包干管 进口( “fmt” “同步” ) func其他(c chan int,wg*sync.WaitGroup){ c您有一个无缓冲通道,这意味着您无法发送,直到有东西等待接收 所以当你这样做的时候: wg.Wait() 在你之前 for v := range myChanel 你永远都无法找到听筒 在使用无缓冲通道时,我从来都不需要使用waitgroup,根据我的经验,只有在没有通道的情况下进行并发操作时才需要它们。您可以这样做: 主程序包 进口( “fmt” “同步” “

我的代码


包干管
进口(
“fmt”
“同步”
)
func其他(c chan int,wg*sync.WaitGroup){

c您有一个无缓冲通道,这意味着您无法发送,直到有东西等待接收

所以当你这样做的时候:

wg.Wait()
在你之前

for v := range myChanel
你永远都无法找到听筒

在使用无缓冲通道时,我从来都不需要使用waitgroup,根据我的经验,只有在没有通道的情况下进行并发操作时才需要它们。您可以这样做:

主程序包
进口(
“fmt”
“同步”
“时间”
)
func其他(c chan int,wg*sync.WaitGroup){
时间。睡眠(时间。秒*1)

c您的代码尝试在通道上发送2个值,然后仅尝试从if接收。在无缓冲通道上,即使是第一次发送也会被阻止。此外,发送方应关闭通道,而不是接收器。如果有多个发送方,则应有一个协调的goroutine将其关闭(如果您想在频道上对范围使用
)。您想实现什么?试试看run@dılosürücü与@dılosürücü比较是的,我试过了。这和你问题中的代码是一样的。你想用你的代码实现什么?对于多个发送者,通常使用等待组来正确关闭频道:
go func(){wg.Wait();close(ch)}()
。在实际代码中,要接收的元素数通常事先不知道。
for v := range myChanel