小编典典

填充缓冲的chan直到变满或持续一段时间

go

我有一个chan string缓冲的,我一直用随机字符串填充它,直到time.Duration过去或直到它变满为止。

我的问题是,考虑到它是一次性任务,还是应该采用更便捷的方式,我是否应该为此使用股票报价器?

这是我目前的做法

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
        }
    }

}

阅读 252

收藏
2020-07-02

共1个答案

小编典典

我不是Go方面的专家(实际上,我从未使用过它),但是文档建议Timer或仅After针对单个事件。

select {
case <-time.After(1*time.Nanosecond):
    return c
case c <- "Random message":
default:
    return c
}
2020-07-02