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) }