先看一個案例
func main() {
    c := make(chan bool, 1)
    go func() {
        fmt.Println("go func()", <-c)
        fmt.Println("go func()", <-c)
    }()
    c <- true
    time.Sleep(1 * time.Second)
    c <- false
    c <- true
    fmt.Println("main()")
}
執行結果
go func() true
... (sleep 1 sec) ...
go func() false
main()就讀出channel而言,有資料就會讀出後立即往下執行,反之,會等待有資料才讀出往下執行。
所以別再以同步或非同步(異步)來理解channel。而是以 阻塞(blocked)來理解才是正確的唷!
另外加以下二個思考題,請大家自行測試,
channel宣告改為以下buffer size = 2 ,執行結果如何?
    c := make(chan bool, 2)    c := make(chan bool, 0)希望以上的解說,能導正對channel的認知
