关于golang当中对select的分析-创新互联

这篇文章将为大家详细讲解有关关于golang当中对select的分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联公司主营龙南网站建设的网络公司,主营网站建设方案,App定制开发,龙南h5微信平台小程序开发搭建,龙南网站营销推广欢迎龙南等地区企业咨询

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 被写入一条数据

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

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

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")}

你会得到如下结果

Case 1 is selected

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

关于关于golang当中对select的分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站名称:关于golang当中对select的分析-创新互联
网页链接:http://pwwzsj.com/article/hooge.html