package main import ( "fmt" "time" ) // ping程序打印ping并等待乒乓球 func pinger(pinger <-chan int, ponger chan<- int) { for { <-pinger fmt.Println("ping") time.Sleep(time.Second) ponger <- 1 } } // ponger打印一个pong,然后等待ping func ponger(pinger chan<- int, ponger <-chan int) { for { <-ponger fmt.Println("pong") time.Sleep(time.Second) pinger <- 1 } } func main() { ping := make(chan int) pong := make(chan int) go pinger(ping, pong) go ponger(ping, pong) // 主goroutine通过发送到ping通道来启动ping / pong ping <- 1 for { // 阻塞主线程直到中断 time.Sleep(time.Second) } }
在Go Playground中运行此代码的稍作修改的版本