【发布时间】:2019-03-25 16:16:11
【问题描述】:
我想弄清楚是否可以在关闭频道后重新打开它。
测试用例:
- 我有一个频道,里面有一些东西
- 我想覆盖它们,因此我需要提前关闭通道
- 我想在频道中添加更多内容并再次对其进行迭代
go func() {
queue <- "1"
queue <- "2"
close(queue)
}()
for i := range queue {
go func(i string) {
fmt.Println("From queue: ", i)
}(i)
}
go func() {
open(queue)
queue <- "3"
queue <- "4"
close(queue)
}()
for i := range queue {
go func(i string) {
fmt.Println("From queue: ", i)
}(i)
}
- 当然
open不存在。如何在 Go 中实现我需要的东西? - 我不想使用睡眠功能
【问题讨论】:
-
不,除了创建一个新频道之外,没有其他方法可以重新打开频道。
-
"我想覆盖它们,因此我需要提前关闭频道" --> 不,您不需要关闭频道。只要频道中有项目,您的循环就会运行。它只会在频道关闭时退出。
-
play.golang.org/p/g2xBoM4M7up 能满足你的需要吗?
-
要么不关闭通道,要么关闭后重新创建(
make(chan string))