欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Golang|select

Golang|select

2025/4/19 9:21:08 来源:https://blog.csdn.net/weixin_44043952/article/details/147250229  浏览:    关键词:Golang|select

文章目录

    • 多路监听
    • 超时控制

多路监听

在这里插入图片描述

  • 如果selcet外面没有for循环,则只会监听一次,要实现一直监听的话要加for循环
  • 但是如果要设置退出条件的话,break语句只会退出这个select而不会退出for循环

在这里插入图片描述

  • select也可以有default,用于不用等channel的阻塞的情况,也就是如果有数据我就读如果没有数据我也不想要被阻塞的情况,速度很快

在这里插入图片描述
在这里插入图片描述

超时控制

  • 有时候我们的函数可能会执行很长一段时间,我们希望能有一个最长执行时间的控制,超过这个时间后我都不想再继续等了

  • 第一种做法:时间到了之后往channel放入元素

在这里插入图片描述
在这里插入图片描述

  • 第二种方法:time.After,会返回一个只读的channel,当等设定好的一段时间后,会往返回的channel放入元素

在这里插入图片描述

  • 第三种方案:借助context,context.WithCancel,ctx里面有done方法,会返回只读channel,没有元素,但是我们显式执行cancel之后会关闭done返回的channel,也不会使select阻塞

在这里插入图片描述

  • 第四种方法:context.WithTimeout,当超时,会直接关闭ctx的管道

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词