英文:
filling a buffered chan until gets full or a time duration passes
问题
我有一个缓冲的chan string
,我会不断用随机字符串填充它,直到经过一段时间或者直到它被填满。
我的问题是,考虑到这是一个一次性的任务,我应该使用一个ticker吗?还是有更方便的方法?
以下是我目前的做法:
package main
import (
"fmt"
"time"
)
func main() {
res := fillChan(time.Duration(1*time.Nanosecond), 100000)
fmt.Println(len(res))
}
func fillChan(maxDuration time.Duration, chanSize int) chan string {
c := make(chan string, chanSize)
ticker := time.NewTicker(maxDuration)
for {
select {
case <-ticker.C:
ticker.Stop()
return c
case c <- "Random message":
default:
return c
}
}
}
请注意,这是一个示例代码,用于说明问题。在实际应用中,你可能需要根据具体情况进行调整。
英文:
i have a chan string
which is buffered, i keep filling it with random strings until a time.Duration passes or until it gets full.
my question is should i use a ticker for that considering that its a one time task or is there a more convienient way?
here is my current way of doing it
package main
import (
"fmt"
"time"
)
func main() {
res := fillChan(time.Duration(1*time.Nanosecond), 100000)
fmt.Println(len(res))
}
func fillChan(maxDuration time.Duration, chanSize int) chan string {
c := make(chan string, chanSize)
ticker := time.NewTicker(maxDuration)
for {
select {
case <-ticker.C:
ticker.Stop()
return c
case c <- "Random message":
default:
return c
}
}
}
答案1
得分: 1
我不是Go的专家(事实上,我从未使用过它),但文档建议使用Timer
或After
来处理单个事件。
select {
case <-time.After(1*time.Nanosecond):
return c
case c <- "随机消息":
default:
return c
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论