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
*/