首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go程序例子(33):Select

Go程序例子(33):Select

原创
作者头像
用户11078756
发布2024-12-18 09:06:08
发布2024-12-18 09:06:08
1350
举报
文章被收录于专栏:go程序例子go程序例子

Go 的 select 让你可以等待多个通道操作。将 goroutines 和通道与 select 结合使用是 Go 的一项强大特性。

代码语言:go
复制
package main

import (
    "fmt"
    "time"
)

func main() {
	// 在我们的示例中,我们将跨两个通道进行选择。
    c1 := make(chan string)
    c2 := make(chan string)
	// 每个通道将在一段时间后接收到一个值,用来模拟例如在并发的 goroutine 中执行的阻塞 RPC 操作。
    go func() {
        time.Sleep(1 * time.Second)
        c1 <- "one"
    }()
    go func() {
        time.Sleep(2 * time.Second)
        c2 <- "two"
    }()
	// 我们将使用 select 同时等待这两个值的到来,并在每个值到达时打印出来。
    for i := 0; i < 2; i++ {
        select {
        case msg1 := <-c1:
            fmt.Println("received", msg1)
        case msg2 := <-c2:
            fmt.Println("received", msg2)
        }
    }
}

我们按预期接收到值 “one” 和 “two”。

代码语言:javascript
复制
$ time go run select.go   
received one
received two
go run select.go  0.10s user 0.10s system 8% cpu 2.251 total

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

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

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

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

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