我有以下场景:每分钟调用一次的函数,每次调用它时都会尝试将数据发送到多个已定义的通道。
var chan1 = make(chan bool)
var chan2 = make(chan bool)
var chan3 = make(chan bool)
go func() {
for {
<-time.After(1* time.Minute)
chan1 <- true
chan2 <- false
chan3 <- true
}
}()
然后在三个单独的go例程中,每个频道都通过select
来读取。
go func() {
var myVar bool
select {
case <- chan1: //or chan2, chan3 etc...
myVar = true
default:
myVar = false
}()
问题是chan1
只接收来自第一次基于循环的数据。因此,似乎正在发生的是,在读取第一个通道之前,所有后续通道都会阻止发送数据。我该如何纠正这个?
答案 0 :(得分:0)
var chan1 = make(chan bool, 1)
var chan2 = make(chan bool, 1)
var chan3 = make(chan bool, 1)
或运行发送asynchronously:
go func() {
chan1 <- true
}()