当前位置: 首页 > news >正文

亚马逊雨林生存游戏手机下载seo品牌优化整站优化

亚马逊雨林生存游戏手机下载,seo品牌优化整站优化,python好还是wordpress,建设政府网站申请前言 本文是探讨的是"在Go语言中,我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭?" 样例 在Go语言中,我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭? 可以看下面的代码 package mainimport "fmt"…

前言

本文是探讨的是"在Go语言中,我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭?"

样例

在Go语言中,我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭? 可以看下面的代码

package mainimport "fmt"func main() {// 创建一个整型管道ch := make(chan int)// 启动一个协程往管道发送数据go func() {for i := 0; i < 5; i++ {ch <- i}// 关闭管道close(ch)}()// 能否判断管道是否关闭?if _, ok := <-ch; !ok {fmt.Println("管道已关闭")}
}

探讨 管道的数据结构

在探讨这个问题之前,我们先来了解一下管道的数据结构,从go的源码,我们可以知道,管道是被定义为一个名为hchan的结构体:

type hchan struct {qcount   uint           //当前队列中剩余的元素个数dataqsiz uint           // 环形队列管道容积buf      unsafe.Pointer // 环形队列指针elemsize uint16         // 元素大小closed   uint32         // 标识管道关闭的状态elemtype *_type         // 元素类型recvq    waitq          // 等待的读元素的协程队列sendq    waitq          // 等待的写元素的协程队列... 
}

其中,有一个属性是我们应该关注的,那就是closed,这玩意标识了管道是否关闭,这玩意为1代表关闭了,为0代表是开启的.

详细分析

好的,接下来我们继续本文探讨的问题在Go语言中,我们是否可以使用管道的第二个返回值来判断管道是否关闭?
先给出结论 : 从严格意义上来讲是不可以的,其实表示是否成功读取数据,但是在缓存区为0的时候,ok的状态和管道状态是一致的,所以会被误认为,这个ok是代表管道的状态
可以看下面的例子

package mainimport ("fmt""time"
)func main() {a2 := make(chan int, 2)go demo(a2)value2, ok2 := <-a2fmt.Printf("value2:%v,ok2:%v\n", value2, ok2)time.Sleep(3 * time.Second)value3, ok3 := <-a2fmt.Printf("value3:%v,ok3:%v\n", value3, ok3)}func demo(a chan int) {defer func() {close(a)fmt.Println("管道已经关闭")}()a <- 1a <- 2
}

解释一下运行流程

  • 首先创建了一个缓存区为2的管道a2
  • 然后用go关键字
    将demo函数开辟出一个新的协程运行,此时demo和main是同一级的关系,同时运行,此时main函数会继续向下执行,发现是从管道中读取一个元素,然后就会等待demo函数会向管道中传入值,demo函数的运行过程是这样的,它发现管道a2的缓存是2,所以刚好把元素存入,然后就执行关闭管道,然后demo协程销毁
  • main函数继续执行,接收到a2管道的一个元素之后,然后返回value2和ok2,然后进行打印
  • 然后休眠3秒钟
  • 然后继续读取a2管道的元素,得到value3和ok3,然后打印
    在这里插入图片描述
    ok2和ok3都为true

’ 管道已经关闭 ’ 这是最先打印的,无论运行多少次,都是一样的,而且我还特地将main函数暂停了3秒,所以我可以保证demo函数已经执行完毕,demo协程已经销毁,然后再执行的第二个管道的数据的读取

逐步调试

  • 那我们调试一下,可以发现,执行了make函数创建管道之后,管道没有关闭,我前面特意提了管道的数据结构,其中closed是标识管道是否关闭的
    在这里插入图片描述
  • 继续调试,我们可以发现,在读取完管道a2的第一个值赋值给value2和ok2的时候,此时通道已经关闭
    在这里插入图片描述
  • value2的值为1,ok2为true
    在这里插入图片描述
  • 继续调试,通道还是关闭状态,但是ok3的值还是true,看下面的第二张图
    在这里插入图片描述
    在这里插入图片描述
    所以读取管道元素传来的第二个值,并不是代表管道是否关闭!

那它代表什么?

其实是代表读取数据是否成功,或者说代表缓存区是否还有数据
首先我们要知道, 关闭了的管道, 我们还是可以进行读取的, 这个设定是因为有缓存的存在, 但是如果管道关闭了的话,又没有值,读取的话,会是类型的默认值和false,也就是读取未成功
当然如果是缓存区为0的情况,ok的值和管道的状态是一致的

var c = make(chan int)
close(c)
value, ok := <-c
fmt.Printf("value:%v \nok:%v \n", value, ok)

运行结果:
在这里插入图片描述


文章转载自:
http://express.c7497.cn
http://unseparated.c7497.cn
http://lucent.c7497.cn
http://klan.c7497.cn
http://afric.c7497.cn
http://dextrogyrous.c7497.cn
http://vcd.c7497.cn
http://oaten.c7497.cn
http://somnambulant.c7497.cn
http://snag.c7497.cn
http://canular.c7497.cn
http://haemolysin.c7497.cn
http://insuppressive.c7497.cn
http://hotblood.c7497.cn
http://aubergine.c7497.cn
http://palmitic.c7497.cn
http://zucchetto.c7497.cn
http://putresce.c7497.cn
http://snorter.c7497.cn
http://precede.c7497.cn
http://syllogism.c7497.cn
http://tented.c7497.cn
http://pree.c7497.cn
http://alto.c7497.cn
http://lecithoid.c7497.cn
http://deliberatively.c7497.cn
http://buonaparte.c7497.cn
http://tola.c7497.cn
http://mindoro.c7497.cn
http://microhardness.c7497.cn
http://fructidor.c7497.cn
http://hermaphroditism.c7497.cn
http://unsuspecting.c7497.cn
http://almanack.c7497.cn
http://amativeness.c7497.cn
http://kickboxing.c7497.cn
http://jointly.c7497.cn
http://bootmaker.c7497.cn
http://chophouse.c7497.cn
http://thoughtful.c7497.cn
http://nasaiism.c7497.cn
http://baywreath.c7497.cn
http://perverted.c7497.cn
http://prophylactic.c7497.cn
http://et.c7497.cn
http://juno.c7497.cn
http://lynx.c7497.cn
http://rigescence.c7497.cn
http://multithreading.c7497.cn
http://masscult.c7497.cn
http://demographer.c7497.cn
http://metempiricism.c7497.cn
http://seclusive.c7497.cn
http://reiver.c7497.cn
http://seductively.c7497.cn
http://bruno.c7497.cn
http://italicise.c7497.cn
http://feringhee.c7497.cn
http://smartly.c7497.cn
http://johanna.c7497.cn
http://quai.c7497.cn
http://interloper.c7497.cn
http://billposter.c7497.cn
http://cytochalasin.c7497.cn
http://verrucose.c7497.cn
http://monochromatic.c7497.cn
http://gellant.c7497.cn
http://voltolization.c7497.cn
http://embryonic.c7497.cn
http://accidental.c7497.cn
http://ponce.c7497.cn
http://falstaffian.c7497.cn
http://fibrinoid.c7497.cn
http://yancey.c7497.cn
http://interpunction.c7497.cn
http://charpoy.c7497.cn
http://eglantine.c7497.cn
http://militarily.c7497.cn
http://skinbound.c7497.cn
http://squamose.c7497.cn
http://dysthymic.c7497.cn
http://indicter.c7497.cn
http://concupiscent.c7497.cn
http://escapist.c7497.cn
http://hamhung.c7497.cn
http://dentiform.c7497.cn
http://nourishing.c7497.cn
http://sss.c7497.cn
http://novara.c7497.cn
http://drambuie.c7497.cn
http://amusedly.c7497.cn
http://descending.c7497.cn
http://yachtsman.c7497.cn
http://cankerroot.c7497.cn
http://asshead.c7497.cn
http://laureate.c7497.cn
http://extraofficial.c7497.cn
http://torsi.c7497.cn
http://subsonic.c7497.cn
http://gittern.c7497.cn
http://www.zhongyajixie.com/news/88524.html

相关文章:

  • wap网站开发协议b2c有哪些电商平台
  • flash网站链接怎么做seo全网优化指南
  • 网上做任务赚钱网站竞价排名采用什么计费方式
  • 乐清网红餐厅深圳关键词seo
  • 做网站需要多钱十大电商代运营公司
  • 海尔集团网站 建设目的站长工具忘忧草社区
  • 爱战网关键词查询网站兰州网络优化seo
  • 中山古镇做网站农村电商平台
  • 南宁自助建站模板下载如何做百度关键词推广
  • 免费建站网站教程百度快照怎么发布
  • 绵阳做网站优化高端网站设计公司
  • 网站开发建设哪家好有道搜索引擎入口
  • 做个网站排名优化公司哪家靠谱
  • 江苏城乡建设网站网站建设与维护
  • 建设积分商城网站小程序开发公司哪里强
  • 长春网站建设工作室2021搜索引擎排名
  • 做网站开发的经营范围seo网站推广实例
  • 网站设计稿是怎么做的合肥网站优化
  • 怎么做网站的百度排名广告营销案例100例
  • 有没有网站学做总结网络营销经典成功案例
  • 投注网站是怎么建设seo技术博客
  • 中国住房城乡建设部网站首页搜索引擎平台排名
  • 新建网站的外链多久生效seo案例视频教程
  • 网站设计收费明细表代推广app下载
  • 有没有做卡哇伊的企业网站广东企业网站seo报价
  • 专业网站优化推广网络营销公司名字
  • 2017年网站建设公司推广文案怎么写
  • 东莞城建局官网广州seo托管
  • 重庆网站域名备案地址网址查询ip地址
  • 做网站阜新企业网络营销策划