From a7ba8cec9b942b012c13626d7b309f2ad6bedbc0 Mon Sep 17 00:00:00 2001 From: switch <977631253@qq.com> Date: Mon, 22 Mar 2021 09:10:31 +0800 Subject: [PATCH] wait out chan finish job --- 17-ring-buffer-channel/main.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/17-ring-buffer-channel/main.go b/17-ring-buffer-channel/main.go index de1a6f2..c02ae7f 100644 --- a/17-ring-buffer-channel/main.go +++ b/17-ring-buffer-channel/main.go @@ -6,10 +6,11 @@ import "log" // Ref: // https://tanzu.vmware.com/content/blog/a-channel-based-ring-buffer-in-go -func NewRingBuffer(inCh, outCh chan int) *ringBuffer { +func NewRingBuffer(inCh, outCh chan int, down chan bool) *ringBuffer { return &ringBuffer{ inCh: inCh, outCh: outCh, + down: down, } } @@ -17,6 +18,7 @@ func NewRingBuffer(inCh, outCh chan int) *ringBuffer { type ringBuffer struct { inCh chan int outCh chan int + down chan bool } func (r *ringBuffer) Run() { @@ -28,13 +30,15 @@ func (r *ringBuffer) Run() { r.outCh <- v } } + r.down <- true close(r.outCh) } func main() { inCh := make(chan int) outCh := make(chan int, 4) // try to change outCh buffer to understand the result - rb := NewRingBuffer(inCh, outCh) + down := make(chan bool, 1) + rb := NewRingBuffer(inCh, outCh, down) go rb.Run() for i := 0; i < 10; i++ { @@ -43,8 +47,9 @@ func main() { close(inCh) - for res := range outCh { - log.Println(res) + if <-down == true { + for res := range outCh { + log.Println(res) + } } - }