package main
import (
"fmt"
)
type work struct {
in chan int
done chan bool
}
func doWorker(id int, w work) {
for n := range w.in {
fmt.Printf("createWorker %d received %c\n", id, n)
go func() {
w.done <- true
}()
}
}
func createWorker(id int) work {
w := work{
in: make(chan int),
done: make(chan bool),
}
go doWorker(id, w)
return w
}
func chanDemo() {
var works [10]work
for i := 0; i < 10; i++ {
works[i] = createWorker(i)
}
for i := 0; i < 10; i++ {
works[i].in <- 'a' + i
}
for i := 0; i < 10; i++ {
works[i].in <- 'A' + i
}
// 第一次执行
for _, worker := range works {
<-worker.done
<-worker.done
}
//// 第二次执行
//for _, worker := range works {
// <-worker.done
//}
}
func main() {
chanDemo()
}
如上代码,为什么for range 的时候要用两次<- worker.done?我两次执行都没有报错,只不过打印出来的值要少一些