【发布时间】:2018-10-15 07:54:53
【问题描述】:
我有几个 goroutine 写入同一个频道。如果我使用缓冲通道,我可以检索输入。但是,如果使用无缓冲通道,我只能读取大约一半的值:
func testAsyncFunc2() {
ch := make(chan int,10)
fmt.Println("testAsyncFunc2")
wg.Add(10)
for i :=0; i < 10; i++ {
go sender3(ch, i)
wg.Done()
}
receiver3(ch)
close(ch)
wg.Wait()
}
这是接收函数:
func receiver3(ch chan int) {
for {
select {
case <-ch:
fmt.Println(<-ch)
default:
fmt.Println("Done...")
return
}
}
}
发件人功能:
func sender3(ch chan int, i int) {
ch <- i
}
然后输出:
testAsyncFunc 2 0 4 6 8 2 完成...
虽然我希望得到 10 个数字。
【问题讨论】:
-
显示 sender3 的代码。 select 语句中的接收分支接收两个值,但只打印一个。
标签: go