var chan1 = make(chan bool, 1)
var chan2 = make(chan bool)
var index = make(chan bool)
func func1() {
for i := 1; i < 27; i++ {
<-chan1
fmt.Print(i)
chan2 <- true
}
}
func func2() {
for i := 'A'; i <= 'Z'; i++ {
<-chan2
fmt.Print(string(i))
chan1 <- true
}
index <- true
}
func main() {
chan1 <- true
go func1()
go func2()
<-index
// 结果:1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z
}
var num = make(chan int, 1)
var char = make(chan int, 1)
var wg sync.WaitGroup
func PrintNums() {
defer wg.Done()
for i := 1; i <= 26; i++ {
fmt.Print(i)
num <- 1
<-char
}
}
func PrintChars() {
defer wg.Done()
for i := 'A'; i <= 'Z'; i++ {
<-num
fmt.Print(string(i))
char <- 1
}
}
func main() {
wg.Add(2)
go PrintNums()
go PrintChars()
wg.Wait()
// 结果: 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ
}
感觉没什么必要用sync.WaitGroup用第一种方式会更加直接。