Select-Case
Select-Case Syntax
select {
case <expr> : {
<case body>
}
// or, you can declare variable(s)
case let <varPattern> = <expr> : {
<case body>
}
// default is optional
default: {
<case body>
}
}
Working Example
package main
import "fmt" as fmt
fun Unit main() {
let ch1 = make(chan String, 1)
let ch2 = make(chan String, 1)
ch1 <- "Hello from ch1"
zero String msg
zero Bool ok
select {
case let msg, ok = <-ch1: {
if ok {
fmt.Println("Case 1:", msg)
} else {
fmt.Println("ch1 closed")
}
}
case <-ch2: {
fmt.Println("Case 2: received from ch2")
}
default: {
fmt.Println("Default case: nothing ready")
}
}
}
package main
import fmt "fmt"
func main() {
ch1 := make(chan string, 1)
ch2 := make(chan string, 1)
ch1 <- "Hello from ch1"
var msg string
var ok bool
select {
case msg, ok := <-ch1:
{
if ok {
fmt.Println("Case 1:", msg)
} else {
fmt.Println("ch1 closed")
}
// Eliminates any 'unused variable' errors
_, _ = msg, ok
}
case <-ch2:
{
fmt.Println("Case 2: received from ch2")
}
default:
{
fmt.Println("Default case: nothing ready")
}
}
// Eliminates any 'unused variable' errors
_, _, _, _ = ch1, ch2, msg, ok
}
Case 1: Hello from ch1
Last updated