package main
import (
"fmt"
"time"
)
func printNumber(chanIn chan int, chanOut chan int, number int, count int) {
for i := 0; i < count; i++ {
<-chanIn
fmt.Print(number)
chanOut <- 1
}
}
func main() {
n := 10
channels := make([]chan int, n)
for i := 0; i < n; i++ {
channels[i] = make(chan int)
}
for i := 0; i < n; i++ {
if i == n-1 {
// 最后
go printNumber(channels[n-1], channels[0], i+1, n)
} else {
go printNumber(channels[i], channels[i+1], i+1, n)
}
}
channels[0] <- 1
time.Sleep(10 * time.Second)
}
package main
import "time"
func printNumber01(chan01 chan bool, chan02 chan bool, count int) {
for i := 0; i < count; i++ {
<-chan01
print("1")
chan02 <- true
}
}
func printNumber02(chan02 chan bool, chan03 chan bool, count int) {
for i := 0; i < count; i++ {
<-chan02
print("2")
chan03 <- true
}
}
func printNumber03(chan03 chan bool, chan01 chan bool, count int) {
for i := 0; i < count; i++ {
<-chan03
print("3")
chan01 <- true
}
}
func main() {
var chan01, chan02, chan03 = make(chan bool), make(chan bool), make(chan bool)
go printNumber01(chan01, chan02, 3)
go printNumber02(chan02, chan03, 3)
go printNumber03(chan03, chan01, 3)
chan01 <- true
time.Sleep(12 * time.Second)
}