我使用缓冲通道编写了一个小工作队列。我想有能力“重新启动”这个工人。
但是当我这样做时,我会感到恐慌,说“恐慌:关闭通道”。
其实我不明白为什么它是一个封闭的通道,因为它在制作后不应该再被关闭了。
这是示例代码(http://play.golang.org/p/nLvNiMaOoA):
package main
import (
"fmt"
"time"
)
type T struct {
ch chan int
}
func (s T) reset() {
close(s.ch)
s.ch = make(chan int, 2)
}
func (s T) wrk() {
for i := range s.ch {
fmt.Println(i)
}
fmt.Println("close")
}
func main() {
t := T{make(chan int, 2)}
for {
go t.wrk()
time.Sleep(time.Second)
t.reset()
}
}
你能告诉我我在那里做错了什么吗?
智慧大石
相关分类