可变长度通道创建

时间:2014-10-19 03:40:11

标签: go

我正在尝试编写一个队列,并且我需要“增长”我的缓冲的chans,有没有办法在不必创建新的元素并将元素移动到新的元素的情况下做到这一点?

2 个答案:

答案 0 :(得分:2)

标准频道无法实现。然而,通过使用具有一些技巧的中间goroutine,您可以制作有效等效的东西。然而,它会比原生频道慢一些。这是作为渠道包中的ResizableChannel实现的(免责声明:我写过)。

答案 1 :(得分:1)

为什么要增加陈的大小?无论是否有读者,您是否希望拥有一个可以继续写作的陈?

如果是这样,你应该使用一个goroutine,它将拥有队列和两个chans(read chan和write chan)。 goroutine将保留一些内容与所有书面项目(通过写陈)接收,并将继续尝试写入读取陈,这将阻止,直到有读者阅读它。

希望这会有所帮助