多个协程交替打印ABC

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {

	Ach := make(chan int, 1)
	Bch := make(chan int)
	Cch := make(chan int)

	wg.Add(3)

	go fn("A", Ach, Bch)
	go fn("B", Bch, Cch)
	go fn("C", Cch, Ach)
	wg.Wait()
	close(Ach)
	close(Bch)
	close(Cch)
}

func fn(str string, ch1 chan int, ch2 chan int) {
	defer wg.Done()
	for i := 0; i < 10; i++ {
		ch1 <- 1
		fmt.Println(str, i+1)
		<-ch2
	}
}

注意:A协程是带缓冲的,否则会导致死锁