我试图找出调用此函数的正确方法:
有两件事你可以做,要么使用缓冲通道不阻塞,即使另一端没有人接收。这样您就可以立即刷新通道内的值。
一种更有效的方法是检查通道中是否有任何可用值,或者通道是否关闭,这应该由发送方在发送所有值时关闭。
接收者可以通过为接收表达式分配第二个参数来测试通道是否已关闭。
v, ok := <-ch
ok如果false没有更多的值可以接收并且通道关闭。使用 select as 检查通道内的值
package main
import (
"fmt"
"sync"
)
var queue = make(chan int)
var wg sync.WaitGroup
func process(){
values := []int{1,2,5,3,9,7}
for _, value := range values {
queue <- value
}
}
func main () {
for i :=0; i < 10; i++ {
go process()
}
wg.Add(1)
go func(){
defer wg.Done()
for j:=0;j<30;j++ {
select {
case <-queue:
fmt.Println(<-queue)
}
}
}()
wg.Wait()
close(queue)
}
尚方宝剑之说
相关分类