package main

import (
	"fmt"
	"sync"
)

func main() {
	var resultchan=make(chan interface{})
	var signchan=make(chan struct{})
	var chartArr=[]string{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}
	syc:=sync.NewCond(&sync.Mutex{})
	sycend1:=sync.NewCond(&sync.Mutex{})
	sycend2:=sync.NewCond(&sync.Mutex{})
	go func() {
		go func() {
			for _,v:=range chartArr{
				<-signchan
				resultchan<-v
				syc.Signal()
			}
			sycend1.Signal()
		}()
		go func() {
			for i:=1;i<27;i++{
				resultchan<-i
				signchan<- struct{}{}
				syc.L.Lock()
				syc.Wait()
				syc.L.Unlock()
			}
			sycend2.Signal()
		}()
	}()
	go func() {
		sycend1.L.Lock()
		sycend1.Wait()
		sycend1.L.Unlock()
		sycend2.L.Lock()
		sycend2.Wait()
		sycend2.L.Unlock()
		close(resultchan)
	}()
	for v:=range resultchan{
		fmt.Print(v)
	}
}

打印结果:

1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z