关于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编译成dll文件

arts #5

手撸golang go与微服务 net.rpc

goland解析json获取指定字段内容

一周 go world 新鲜事

go语言 defer详解

go语言基础之流程控制

golang panic可以捕获标准错误吗

go语言反射的使用

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




打赏

取消

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

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

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

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

评论

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

    正在狠努力加载,请稍候...