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

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

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

注意事项

在使用select语句时,需要注意以下几点:

  1. select语句只能用于通道的读写操作,不能用于普通变量的操作。
  2. 如果多个通道同时就绪,select语句会随机选择一个通道来执行对应的操作。
  3. select语句中的case语句必须是常量表达式,不能是变量或表达式。 4. select语句中的default语句在所有通道都没有就绪时执行,但是如果有一个或多个通道就绪,那么default语句将不会执行。
  4. select语句执行完一个case后就会退出,如果需要持续监听通道状态,可以将select语句放在for循环中。

以下是一个在for循环中使用select语句的示例:

代码语言:javascript
复制
func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)

    go func() {
        for i := 1; i <= 5; i++ {
            ch1 <- i
            time.Sleep(time.Second)
        }
    }()

    go func() {
        for i := 6; i <= 10; i++ {
            ch2 <- i
            time.Sleep(time.Second)
        }
    }()

    for {
        select {
        case msg1 := <-ch1:
            fmt.Println("Received from ch1:", msg1)
        case msg2 := <-ch2:
            fmt.Println("Received from ch2:", msg2)
        }
    }
}

在上面的示例中,我们启动了两个goroutine分别向两个通道中发送数据。然后我们将select语句放在一个无限循环中,以持续监听这两个通道的状态。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档