Channels and Select
Select With a Ready Case
A select chooses a case that can proceed; this example keeps only one case ready.
Select With a Ready Case
select_ready.go
package main
import "fmt"
func main() {
var route =
primary := make(chan string, 1)
backup := make(chan string, 1)
if route == "primary" {
primary <- "from primary"
} else {
backup <- "from backup"
}
chosen := ""
select {
case chosen = <-primary:
fmt.Println("case=", "primary")
case chosen = <-backup:
fmt.Println("case=", "backup")
}
fmt.Println("chosen=", chosen)
}
package main
import "fmt"
func main() {
var route =
primary := make(chan string, 1)
backup := make(chan string, 1)
if route == "primary" {
primary <- "from primary"
} else {
backup <- "from backup"
}
chosen := ""
select {
case chosen = <-primary:
fmt.Println("case=", "primary")
case chosen = <-backup:
fmt.Println("case=", "backup")
}
fmt.Println("chosen=", chosen)
}
select
`select` waits on channel operations. If only one case is ready, that case is deterministic.