使用两个goroutine,向标准输出中按顺序交替打印出字母和数字,输出是a1b2c3...
这里我们使用两个channel保证它们打印的顺序。
使用两个通道(channel)是确保打印顺序的一个有效方法,尤其是在涉及到交替执行的并发任务时。在我们的场景中,目标是让两个 goroutine 交替执行并打印字符和数字。使用两个通道可以精确地控制它们的执行顺序。
func main() {var wg sync.WaitGroupcharChan := make(chan struct{}, 1)numChan := make(chan struct{}, 1)wg.Add(2)go printCharacters(charChan, numChan, &wg)go printNumbers(numChan, charChan, &wg)charChan <- struct{}{} // 开始打印字符wg.Wait() // 等待两个goroutine完成
}func printCharacters(charChan, numChan chan struct{}, wg *sync.WaitGroup) {defer wg.Done()for char := 'a'; char <= 'z'; char++ {<-charChanfmt.Printf("%c", char)numChan <- struct{}{}}
}func printNumbers(numChan, charChan chan struct{}, wg *sync.WaitGroup) {defer wg.Done()for i := 1; i <= 26; i++ {<-numChanfmt.Print(i)charChan <- struct{}{}}
}