关于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的理解的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

ubuntu下安装golang

手撸golang 架构设计原则 依赖倒置原则

go - go build 各种系统下的可执行文件

golang不适合开发web吗

go语言 select 语句

golang context 详解

golang 如何读取csv文件

手撸golang 架构设计原则 里氏替换原则

舍弃python+c,salesforce将企业级软件全面迁移到go语言

golang map需要make吗

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




打赏

取消

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

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

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

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

评论

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