index
Go's _select_ lets you wait on multiple channel operations. Combining goroutines and channels with select is a powerful feature of Go.
package main
import (
	"fmt"
	"time"
)
func main() {
For our example we'll select across two channels.
	c1 := make(chan string)
	c2 := make(chan string)
Each channel will receive a value after some amount of time, to simulate e.g. blocking RPC operations executing in concurrent goroutines.
	go func() {
		time.Sleep(1 * time.Second)
		c1 <- "one"
	}()
	go func() {
		time.Sleep(2 * time.Second)
		c2 <- "two"
	}()
We'll use `select` to await both of these values simultaneously, printing each one as it arrives.
	for i := 0; i < 2; i++ {
		select {
		case msg1 := <-c1:
			fmt.Println("received", msg1)
received one
		case msg2 := <-c2:
			fmt.Println("received", msg2)
received two
		}
	}
}
index