Go 带有两个goroutine的乒乓球
示例
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)
}
}在GoPlayground中运行此代码的稍作修改的版本