通道选择
package main
import (
"fmt"
"time"
)
func main () {
msgch1 := make(chan string)
msgch2 := make(chan string)
go func(){
time.Sleep(time.Second * 1)
msgch1 <- "1 goroutine"
fmt.Println("first msg tx ed")
}()
go func() {
time.Sleep(time.Second * 2)
msgch2 <- "2ed gorotine"
fmt.Println("Second msg transmitted")
}()
select {
case msg1 := <- msgch1:
fmt.Println("received msg ", msg1)
case msg2 := <- msgch2:
fmt.Println("received msg ", msg2)
}
select {
case msg1 := <- msgch1:
fmt.Println("received msg ", msg1)
case msg2 := <- msgch2:
fmt.Println("received msg ", msg2)
}
time.Sleep(time.Second * 1)
}
超时处理
package main
import (
"fmt"
"time"
)
func main() {
mch1 := make(chan string)
go func () {
time.Sleep(time.Second * 1)
fmt.Println("Routine 1 >>>>>")
mch1 <- "1 second"
} ()
select {
case msg1 := <- mch1 :
fmt.Println("msg received ", msg1)
case t2 := <-time.After(time.Second * 1):
fmt.Println("timeout after", t2)
}
mch2 := make(chan string)
go func () {
time.Sleep(time.Second * 1)
fmt.Println("Routine 2 >>>>>")
mch2 <- "I'm routine 2"
} ()
select {
case msg2 := <- mch2:
fmt.Println("Succced rx msg: ", msg2)
case <- time.After(time.Second * 2) :
fmt.Println("time out after 2s")
}
}