dongshang3309 2015-09-19 08:47
浏览 9
已采纳

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

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条回答 默认 最新

  • doulun1915 2015-09-19 09:06
    关注

    I am no expert in Go (in fact, I've never used it), but the documentation suggests Timer, or After for single events.

    select {
    case <-time.After(1*time.Nanosecond):
        return c
    case c <- "Random message":
    default:
        return c
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站