当我在发件人一侧关闭时,为什么仍会慌张地“在关闭的通道上发送”?

时间:2019-07-10 12:35:55

标签: go channel

我有一个click通知发件人关闭频道,还有一个stopChan来确保只有一个发件人可以关闭频道,但是我仍然收到“在关闭的频道上发送”的恐慌,为什么?

sync.Once

1 个答案:

答案 0 :(得分:0)

go并发功能非常强大。协调并发是非常 困难。幸运的是,go标准库提供了许多工具来帮助实现这一目标。您可能应该熟悉context软件包。

context.Context在幕后使用完工通道(类似于stopChan),但具有取消链接之类的其他机制。在整个go标准库中,它们也用于HTTP,数据库和其他阻止类型的请求。

正如@JimB所提到的,在协调生产者/消费者时,通常很少需要sync.Once。通常chansync.WaitGroup就足够了。

无论如何,这是使用context.Context对代码的协调修复:

https://play.golang.org/p/QwszE_bW41X