0%

交替打印字母和数字

两个 channel 负责通知,english 负责通知打印字母的 goroutine 来打印字母,num用来通知打印数字的 goroutine 打印数字。

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

package main

import (
	"fmt"
	"strings"
	"sync"
)

func main() {
	var wg sync.WaitGroup
	num, english := make(chan bool), make(chan bool)
	str := "ABCD"
	//fmt.Println(strings.Count(str[2:], ""))
	go func() {
		i := 1
		for {
			select {
			case v, _ := <-num:
				if !v {
					wg.Done()
					return
				}
				fmt.Println(i)
				i++
				english <- true
				break

			default:
				break
			}
		}
	}()
	wg.Add(1)
	go func() {
		i := 0
		for {
			select {
			case <-english:
				//strings.Count “” 结束判断
				//fmt.Println("判断条件", strings.Count(str, "")-1)
				if i >= strings.Count(str, "")-1 {
					num <- false
					wg.Done()
					return
				}
				fmt.Println(str[i : i+1])
				i++
				num <- true
				break
			default:
				break
			}

		}
	}()

	num <- true
	wg.Wait()
}
-------------本文结束感谢您的阅读-------------
打赏一瓶矿泉水