实际上我正在尝试做这样的事情:
我有一个生产者和一个消费者,消费者每隔几分钟检查一次并计算通道中的事件。但是当我尝试在 go Playground 中测试它时,我发现:
package main
import (
"fmt"
"time"
)
func main() {
c1 := make(chan string, 1)
quit := make(chan int)
go func() {
for i := 0; i < 10; i++ {
c1 <- "result 1"
}
quit <- 1
}()
count := 0
for stop := false; !stop; {
for bk := false; !bk; {
select {
case _, ok := <-c1:
if ok {
count++
}
default:
bk = true
fmt.Println("default")
}
}
select {
case <-quit:
fmt.Println("stop")
stop = true
default:
}
fmt.Println(count)
time.Sleep(time.Second / 10)
}
fmt.Println("over")
}
无论我睡多久,从 time.Second/10 到 time.Second*10,输出都会是:
default
0
default
2
default
4
default
6
default
8
default
10
default
stop
10
over
为什么goroutine只能将2个事件放入通道中?我想要这样的东西:
default
0
default
stop
10
over
问题是通道大小,我只是从其他代码复制而不检查......
汪汪一只猫
SMILET
慕无忌1623718
相关分类