Go-并发编程-使用 select 语句实现多路复用(一)
2023-06-13 09:18:46 时间
在Go语言中,select语句是一种非常有用的控制结构,它可以实现多路复用和通信操作。select语句用于同时监听多个通道,并在其中任何一个通道就绪时执行对应的操作。
使用select语句实现多路复用
在Go语言中,使用select语句可以同时监听多个通道的状态,并执行相应的操作。select语句由一组case语句组成,每个case语句表示一个通道的状态和对应的操作。当有多个通道同时就绪时,select语句会随机选择一个就绪的通道来执行对应的操作。
以下是一个简单的使用select语句的示例:
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
ch1 <- 1
}()
go func() {
ch2 <- 2
}()
select {
case msg1 := <-ch1:
fmt.Println("Received from ch1:", msg1)
case msg2 := <-ch2:
fmt.Println("Received from ch2:", msg2)
}
}
在上面的示例中,我们创建了两个整数类型的通道ch1和ch2,并启动了两个goroutine分别向这两个通道中发送数据。然后我们使用select语句同时监听这两个通道的状态,并在其中任何一个通道就绪时打印接收到的数据。
在运行上面的代码时,输出结果可能是“Received from ch1: 1”或“Received from ch2: 2”,这取决于哪个通道先就绪了。
使用select语句时,还可以使用default语句来实现非阻塞的通信操作。default语句表示如果所有的通道都没有就绪,就执行default语句中的操作。以下是一个使用default语句的示例:
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
select {
case msg1 := <-ch1:
fmt.Println("Received from ch1:", msg1)
case msg2 := <-ch2:
fmt.Println("Received from ch2:", msg2)
default:
fmt.Println("No message received")
}
}
在上面的示例中,我们使用select语句监听两个通道ch1和ch2的状态,但是在没有任何一个通道就绪时,会执行default语句中的操作。
相关文章
- Go 函数(Go面试系列)
- static web server by go
- linux go环境搭建_golang后端框架
- 初识Go语言
- Mac下环境搭建(用brew安装go和protoc)
- JetBrains GoLand 2022 Mac(Go集成开发工具)中文版
- go中的fatal error:concurrent map read and map write
- 不背锅运维:上篇:Go并发编程
- Go语言实现的可读性更高的并发神库
- go的数据类型-复合数据类型-数组(二)
- Go-数据库操作(三)
- 避坑:Go并发编程时,如何避免发生竞态条件和数据竞争
- Go语言遍历map(访问map中的每一个键值对)
- Go语言error接口:返回错误信息
- Go语言zip归档文件的读写操作
- Go语言圣经–并发的循环习题详解编程语言
- Go语言单例模式简述
- 编程新精英:Go语言 Redis开发(go语言redis开发)
- Linux上构建Go开发环境(linux安装go环境)
- Go 并发编程中的经验教训
- MySQL中使用Go语言的好处(mysql中go什么)
- 踏上oracle编程之路,Go(go oracle编程)
- 征程开启学习使用Oracle数据库(go oracle数据库)