协程交替打印数字
# 使用 goroutine 开多个协程交替打印 1234,使用 channel 实现
package main
import (
"fmt"
"sync"
"time"
)
var (
chNum chan int
wg sync.WaitGroup
)
func main() {
chNum = make(chan int, 4)
chNum <- 1
for i := 1; i <= 4; i++ {
wg.Add(1) // 等待一个任务完成
go func() {
defer wg.Done() // 减少一个任务
for {
v := <-chNum // 若没数据,阻塞等待
fmt.Printf("id: %d, num:%d\n", i, v)
time.Sleep(1 * time.Second)
if v >= 4 {
v = 1
} else {
v++
}
chNum <- v
}
}()
}
wg.Wait() // 等待所有协程完成
}