Google Go で ping pong
Google の Go で Erlang の 3.2 Message Passing にある ping pong を作ってみた。
package main import "fmt"; func main() { pongCh := make(chan string); pingCh := ping(3, pongCh); quit := pong(pongCh, pingCh); <-quit; } func ping(count int, pongCh chan string) chan string { pingCh := make(chan string); go func() { for { switch { case count > 0: pongCh <- "ping!"; <-pingCh; fmt.Println("Ping received pong."); case count == 0: fmt.Println("Ping finished"); pongCh <- "finished"; return; } count = count - 1; } }(); return pingCh; } func pong(pongCh chan string, pingCh chan string) chan bool { quit := make(chan bool); go func() { for { switch pingRet := <-pongCh; { case pingRet == "finished": fmt.Println("Pong finished."); quit <- false; break; default: fmt.Println("Pong reveived ping."); pingCh <- "pong!"; } } }(); return quit; }