前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go-并发编程-使用 select 语句实现多路复用(一)

Go-并发编程-使用 select 语句实现多路复用(一)

原创
作者头像
堕落飞鸟
发布2023-04-21 13:53:39
2430
发布2023-04-21 13:53:39
举报
文章被收录于专栏:飞鸟的专栏

在Go语言中,select语句是一种非常有用的控制结构,它可以实现多路复用和通信操作。select语句用于同时监听多个通道,并在其中任何一个通道就绪时执行对应的操作。

使用select语句实现多路复用

在Go语言中,使用select语句可以同时监听多个通道的状态,并执行相应的操作。select语句由一组case语句组成,每个case语句表示一个通道的状态和对应的操作。当有多个通道同时就绪时,select语句会随机选择一个就绪的通道来执行对应的操作。

以下是一个简单的使用select语句的示例:

代码语言:javascript
复制
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语句的示例:

代码语言:javascript
复制
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语句中的操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用select语句实现多路复用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档