实现思路
- 使用
select
语句可以同时监听多个通道的操作。
- 为每个通道准备一个
case
分支,当某个通道可读时,对应的case
分支会被执行,从而处理该通道的数据。
- 可以添加一个
default
分支来处理当没有通道可读时的情况(可选),如果不添加default
分支,select
语句会阻塞直到某个通道可读。
代码示例
package main
import (
"fmt"
)
func main() {
userLoginCh := make(chan string)
systemStatusCh := make(chan string)
go func() {
userLoginCh <- "user1 logged in"
}()
go func() {
systemStatusCh <- "system status updated"
}()
select {
case userLogin := <-userLoginCh:
fmt.Println("User login:", userLogin)
case systemStatus := <-systemStatusCh:
fmt.Println("System status:", systemStatus)
default:
fmt.Println("No data available yet")
}
}