这是一道比较经典的Go面试题,要求效果:
A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26
代码实现
package main
import (
"fmt"
"sync"
)
var chChan = make(chan struct{})
var numChan = make(chan struct{})
var wg sync.WaitGroup
func printNum() {
defer wg.Done()
for i := 0; i < 26; i++ {
// 等待printChar函数通知
<-chChan
fmt.Printf("%d", i+1)
// 向numChan中发送空结构体,通知printChar函数:我好了,该你了
numChan <- struct{}{}
}
}
func printChar() {
defer wg.Done()
for i := 0; i < 26; i++ {
fmt.Printf("%c", 'A'+i)
// 向chChan中发送空结构体,通知printNum函数:我好了,该你了
chChan <- struct{}{}
// 等待printNum函数通知
<-numChan
}
}
func main() {
wg.Add(2)
go printChar()
go printNum()
wg.Wait()
}
通过chChan和numChan两个通道控制两个goroutine交替打印。