问题描述:

  1. 使用两个goroutine交替打印序列,一个goroutinue打印数字,另一个goroutine打印字母,最终结果如下: 12AB34CD45EF78GH910IJ
  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. )
  6. func PrintNums(printChar chan int, wg *sync.WaitGroup) {
  7. defer wg.Done()
  8. for i := 0; i < 5; i++ {
  9. for j := 0; j < 2; j++ {
  10. fmt.Printf("%d", 2*i+j+1)
  11. }
  12. printChar <- 1
  13. <- printChar
  14. }
  15. }
  16. func PrintChars(printChar chan int, wg *sync.WaitGroup) {
  17. defer wg.Done()
  18. for i := 0; i < 5; i++ {
  19. <- printChar
  20. for j := 0; j < 2; j++ {
  21. fmt.Printf("%c", 'A'+(2*i+j))
  22. }
  23. printChar <- 1
  24. }
  25. }
  26. func main() {
  27. flag := make(chan int)
  28. var wg sync.WaitGroup
  29. wg.Add(2)
  30. go PrintNums(flag, &wg)
  31. go PrintChars(flag, &wg)
  32. wg.Wait()
  33. }

golang 并发 面试 - 图1