2017-11-09 13:05:44 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Compared with unbuffered counterpart, the sender of buffered channel will block when there is no empty slot of the channel,
|
|
|
|
// while the receiver will block on the channel when it is empty.
|
|
|
|
func main() {
|
|
|
|
ch := make(chan int, 2)
|
|
|
|
|
|
|
|
go func(ch chan int) {
|
2017-11-11 04:48:56 +03:00
|
|
|
|
2017-11-09 13:05:44 +03:00
|
|
|
for i := 1; i <= 5; i++ {
|
|
|
|
ch <- i
|
|
|
|
fmt.Println("Func goroutine sends data: ", i)
|
|
|
|
}
|
|
|
|
close(ch)
|
|
|
|
}(ch)
|
|
|
|
|
|
|
|
fmt.Println("Main goroutine sleeps 2 seconds")
|
|
|
|
time.Sleep(time.Second * 2)
|
|
|
|
|
|
|
|
fmt.Println("Main goroutine begins receiving data")
|
|
|
|
for d := range ch {
|
|
|
|
fmt.Println("Main goroutine received data:", d)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Main goroutine sleeps 2 seconds
|
|
|
|
|
|
|
|
// Func goroutine sends data: 1
|
|
|
|
// Main goroutine received data: 1
|
|
|
|
|
|
|
|
// Func goroutine sends data: 2
|
|
|
|
// Main goroutine received data: 2
|
|
|
|
|
|
|
|
// Main goroutine begins receiving data
|
|
|
|
// Func goroutine sends data: 3
|
|
|
|
// Main goroutine received data: 3
|