协程实现顺序打印123
参考解析
题目来源:
答案:
package main
import "fmt"
var one = make(chan struct{}, 1)
var two = make(chan struct{}, 1)
var three = make(chan struct{}, 1)
var done = make(chan struct{})
func PrintOne() {
defer close(one)
for i := 0; i < 10; i++ {
<-three
fmt.Println("1")
one <- struct{}{}
}
}
func PrintTwo() {
defer close(two)
for i := 0; i < 10; i++ {
<-one
fmt.Println("2")
two <- struct{}{}
}
}
func PrintThere() {
defer close(three)
for i := 0; i < 10; i++ {
<-two
fmt.Println("3")
three <- struct{}{}
}
done <- struct{}{}
}
func main() {
defer close(done)
three <- struct{}{}
go PrintOne()
go PrintTwo()
go PrintThere()
<-done
}