关于golang当中对select的理解


本文摘自php中文网,作者藏色散人,侵删。

下面由Golang教程栏目给大家介绍关于golang当中对select的理解,希望对需要的朋友有所帮助!

Select 语句和 Swithc 语句的句式十分相似,但是 Select 中的 Case 必须是一个通信操作(一个 Channel 操作)。其执行逻辑是:哪一个 Case 后面的 Channel 操作可以被成功执行,则执行该 Case 下的代码块。如果同时多个 Case 可被成功执行,则随机选择其中一个。如果所有 Case 均不可被成功执行,则执行 default 下的代码块。如果没有 default 则会阻塞并返回死锁错误。

监听 IO 操作,当 IO 操作发生时,触发相应的动作
这个说法是对的,监听(Channel 的) IO 操作并作出相应动作确实是 Select 的应用场景,但是千万不要误以为 Select 语句是在选择哪个 case 下的 Channel 操作被执行了!这么理解是错的!Select 真正会选择的是哪个 case 下的 Channel 操作可以被成功执行,则执行该 case 下的代码块。

比如,当一个 Channel c1 被写入一条数据

1

c1 := make(chan string, 1)c1 <- "Hello World!"

如果我们有以下 Select 判断语句

1

2

3

4

5

6

7

select {

    case <-c1:

        fmt.Println("Case 1 is selected")

    case c1<-"Hello World!":

        fmt.Println("Case 2 is selected")

    default :

        fmt.Println("Default is selected")}

你会得到如下结果

1

Case 1 is selected

因为 c1 被写入了一条数据,所以我们可以成功 “从 c1 读出一条数据”。也就是第一个 case 可以被成功执行。所以,第一个 case 下的代码块最终被执行。

以上就是关于golang当中对select的理解的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang 进行文件夹的压缩与解压

什么是量化交易|量化交易平台

手撸golang 结构型设计模式 装饰器模式

android one和android go有什么区别?

go微服务入门到容器化实践,落地可观测的微服务电商项目

golang变量、常量

你知道go程序的基本要素吗

单核cpu下golang调度及抢占式调度的实现

go那些事儿|defer必掌握知识

15 golang结构体详解(一)

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...