go语言异步交叉输出abc
func consume() { ch:=make(chan string,30) wg:= sync.WaitGroup{} wg.Add(1) go func() { for{ if len(ch)==30{ break } if len(ch)%3==0{ ch<-"a" } } defer wg.Done() }() wg.Add(1) go func() { for{ if len(ch)==30{ break } if len(ch)%3==1{ ch<-"b" } } defer wg.Done() }() go func() { for{ if len(ch)%3==2{ ch<-"c" } if len(ch)==30{ break } } defer wg.Done() }() wg.Wait() close(ch) for i:=1;i<=30;i++{ fmt.Printf("%v",<-ch) if i%3==0{ fmt.Println() } } }