select
select allows you to wait on multiple channels, similar to Promise.race() in JavaScript.
receive Timeout
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan string)
go func() {
time.Sleep(time.Second * 1)
ch <- "1"
}()
select {
case msg := <-ch:
fmt.Println(msg)
case <-time.After(time.Second * 2):
fmt.Println("timeout")
}
}