diff --git a/base/channel/example/main.go b/base/channel/example/main.go new file mode 100644 index 0000000..19959cc --- /dev/null +++ b/base/channel/example/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "fmt" + "sync" +) + +var wg = new(sync.WaitGroup) +var once = new(sync.Once) + +//consumerNum := int32 +//var consumer = atomic.N + +func f1(ch chan int) { + defer wg.Done() + for i := 0; i < 100; i++ { + ch <- i + } + + // 使用完必须 close 不然将导致死锁 + close(ch) +} + +func f2(in chan int, out chan int) { + defer wg.Done() + for i := range in { + out <- i * i + } + + once.Do(func() { + // 使用完必须 close 不然将导致死锁 + close(out) + }) +} + +func main() { + ch := make(chan int, 20) + ch2 := make(chan int, 5) + wg.Add(2) + go f1(ch) + go f2(ch, ch2) + + for i := range ch2 { + fmt.Println(i) + } + + wg.Wait() +}