[Go] unbuffered 與 buffered channel 分別

unbuffered

c := make(chan bool)
go func() {
    fmt.Println("GO GO GO")
    <-c
}()
c <- true // block here
fmt.Println("hi")

/*
GO GO GO
hi
*/

buffered

c := make(chan bool, 1)
go func() {
    fmt.Println("GO GO GO")
    <-c
}()
c <- true // no block
fmt.Println("hi")

/*
hi
*/
倪任爾 Ngai Yam Yi / CC BY-NC-SA 4.0