#### 欢迎大家来解惑:
以下代码中, done 这个 channel 使用 缓冲 和不使用缓冲,最终结果是一样的,这是为何?
这两者运行的过程分别是这样的?有何同与不同?
```
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan bool, 1)
// done := make(chan bool)
go worker(done)
<-done
}
func worker(done chan bool) {
fmt.Println("start to working...")
time.Sleep(2 * time.Second)
fmt.Println("done")
done <- true
}
```
结果肯定一样,不管是否有缓冲,`<- done` 都使得程序不会提前终止;这里有无缓冲的区别,无非就是 `done <- true` 是否有可能堵塞。
#2
更多评论
这个问题,是在阅读 http://books.studygolang.com/gobyexample/channel-synchronization/ 这个例子的时候产生的
#1