From 14eee3e9ee40b4b1c1853e08a5e2e05f0c14e2d2 Mon Sep 17 00:00:00 2001 From: Jian Han Date: Thu, 9 Nov 2017 20:05:44 +1000 Subject: [PATCH] added buffed channel --- channel/buffed/main.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 channel/buffed/main.go diff --git a/channel/buffed/main.go b/channel/buffed/main.go new file mode 100644 index 0000000..52a1d19 --- /dev/null +++ b/channel/buffed/main.go @@ -0,0 +1,40 @@ +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) { + 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