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.