交替打印数字和字母

交替打印数字和字母

问题描述

使用两个 goroutine 交替打印序列,一个 goroutine 打印数字, 另外一个 goroutine 打印字母, 最终效果如下:

12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728


func main() {

letter,number :=make(chan int),make(chan int)

wait := sync.WaitGroup{}

go func() {

i :=1

      var nint

      for{

select {

case n = <-number:

if n ==2{

fmt.Println("func1 exit")

return

            }

fmt.Print(i)

i++

fmt.Print(i)

i++

letter <-1

        }

}

}()

wait.Add(1)

go func(wait *sync.WaitGroup) {

i :='A'

      for{

select {

case <-letter:

if i >'Z'{

number <-2

              wait.Done()

fmt.Println("func2 exit")

return

            }

fmt.Print(string(i))

i++

fmt.Print(string(i))

i++

number <-1

        }

}

}(&wait)

number<-1

  wait.Wait()

}

源码解析

这里用到了两个channel负责通知,letter负责通知打印字母的goroutine来打印字母,number用来通知打印数字的goroutine打印数字。

wait用来等待字母打印完成后退出循环。

你可能感兴趣的:(交替打印数字和字母)