func randomChain() chan interface{} { nc := make(chan interface{}) count := 0 go func() { for { // st := int(1000/countPerSecond) // time.Sleep(time.Millisecond*100) nc <- &Data{rand.Int63()} // 使用 select 避免阻塞 select { case <-nc: default: } // fmt.Println(len(nc)) count += 1 // fmt.Println("nc:", len(nc)) } }() return nc } 增加每秒打印count
时间: 2024-02-28 21:52:45 浏览: 66
详解go语言 make(chan int, 1) 和 make (chan int) 的区别
可以通过增加一个定时器和一个计数器来实现每秒打印 `count` 的功能。具体实现如下:
```go
func randomChain() chan interface{} {
nc := make(chan interface{})
count := int64(0)
go func() {
ticker := time.NewTicker(1 * time.Second)
for {
select {
case <-ticker.C:
fmt.Println("count:", count)
count = 0
default:
nc <- &Data{rand.Int63()}
count++
}
}
}()
return nc
}
```
在这个实现中,使用了 `time.NewTicker` 创建一个定时器,每隔一秒钟会发送一个时间事件到 `ticker.C` channel 中。在 goroutine 中,使用 select 语句监听 `nc` 和 `ticker.C` 两个 channel,如果 `nc` 中有数据,则处理数据并将 `count` 加1,如果 `ticker.C` 中有事件,则打印 `count`,并将 `count` 设置为0。这样就可以每秒打印 `count` 了。
阅读全文