package main
import (
"fmt"
"time"
)
func main() {
// 在某些场景下需要同时从多个通道接收数据,这个时候我们需要用到select多路复用
// 1、定义一个管道10个数据 int
intChan := make(chan int, 10)
for i := 0; i < 10; i++ {
intChan <- i
}
// 2、定义一个管道10个数据 string
stringChan := make(chan string, 10)
for i := 0; i < 5; i++ {
stringChan <- "hello" + fmt.Sprintf("%d", i)
}
// 使用select来获取channel里面的数据的时候不需要关闭channel
for {
select {
case v := <-intChan:
fmt.Printf("从 intChan 读取的数据%d\n", v)
time.Sleep(time.Millisecond * 50)
case v := <-stringChan:
fmt.Printf("从 stringChan 读取的数据%v\n", v)
time.Sleep(time.Millisecond * 50)
default:
fmt.Printf("数据获取完毕")
return // 注意要退出...
}
}
}
Golang-select多路复用简单示例
于 2024-06-06 23:26:04 首次发布