var chan1 = make(chan bool, 1)
var chan2 = make(chan bool)
var index = make(chan bool)

func func1() {
	for i := 1; i < 27; i++ {
		<-chan1
		fmt.Print(i)
		chan2 <- true
	}
}

func func2() {
	for i := 'A'; i <= 'Z'; i++ {
		<-chan2
		fmt.Print(string(i))
		chan1 <- true
	}
	index <- true
}

func main() {
	chan1 <- true
	go func1()
	go func2()
	<-index
	// 结果:1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z
}
var num = make(chan int, 1)
var char = make(chan int, 1)
var wg sync.WaitGroup

func PrintNums() {
	defer wg.Done()
	for i := 1; i <= 26; i++ {
		fmt.Print(i)
		num <- 1
		<-char
	}
}

func PrintChars() {
	defer wg.Done()
	for i := 'A'; i <= 'Z'; i++ {
		<-num
		fmt.Print(string(i))
		char <- 1
	}
}
func main() {
	wg.Add(2)
	go PrintNums()
	go PrintChars()
	wg.Wait()
	// 结果: 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ
}

感觉没什么必要用sync.WaitGroup用第一种方式会更加直接。