填充一个缓冲通道,直到它变满或者经过一段时间。

huangapple go评论122阅读模式
英文:

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 (
	&quot;fmt&quot;
	&quot;time&quot;
)

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 &lt;-ticker.C:
			ticker.Stop()
			return c
		case c &lt;- &quot;Random message&quot;:
		default:
			return c
		}
	}

}

答案1

得分: 1

我不是Go的专家(事实上,我从未使用过它),但文档建议使用TimerAfter来处理单个事件。

select {
case <-time.After(1*time.Nanosecond):
    return c
case c <- "随机消息":
default:
    return c
}
英文:

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 &lt;-time.After(1*time.Nanosecond):
    return c
case c &lt;- &quot;Random message&quot;:
default:
    return c
}

huangapple
  • 本文由 发表于 2015年9月19日 16:47:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/32666182.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定