我不清楚为什么如果我删除in ,则 in 中的 print 语句func a1将不会打印任何内容。我认为在我们将某些内容发送到结果之前,应该执行打印语句,并且不应对此产生任何影响。<-resultfunc a2<-resultfunc a2(){ x := 3 result := make(chan int, 10) input := make(chan int, 10) go a1(x, input, result) input <- 4 <-result}func a1(x int, input <-chan int, result chan<- int){ y := <-input fmt.Println("hello", y) result <- x}但是,然后我尝试了以下代码:hello无论我<-result是否有,它都会打印。func a2(){ x := 3 result := make(chan int, 10) go a1(x, result) <-result}func a1(x int, result chan<- int){ fmt.Println("hello") result <- x}能否详细解释一下,以便初学者能够理解?看起来input <-chan int这个输入通道正在做一些导致差异的事情。
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
因为如果没有 <-result,a2() 返回并且程序终止,假设 a2() 是 main() 唯一做的事情。可能 a1() 甚至永远不会醒来,因为输入通道已缓冲,并且写入不会阻塞。如果将其设置为无缓冲,则 a1() 将在 a2() 返回之前唤醒,但这仍然不能保证 println 能够运行。
使用 <-result,a2() 等待 a1() 从结果通道读取,该通道位于 println 之后。这是确保 println 运行的唯一最安全的方法。
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消