首页 > 其他分享 >golang select

golang select

时间:2022-09-22 16:46:36浏览次数:54  
标签:goroutine bufChan 阻塞 golang func main select

前言:

Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前的groutine。所以,有人也会说select是用来阻塞监听goroutine的。

阻塞main函数案例

有时候我们会让main函数阻塞不退出,如http服务,我们会使用空的select{}来阻塞main goroutine

package main
import (
    "fmt"
    "time"
)

func main()  {
    bufChan := make(chan int)
    
    go func() {
        for{
            bufChan <-1
            time.Sleep(time.Second)
        }
    }()


    go func() {
        for{
            fmt.Println(<-bufChan)
        }
    }()
     
    select{}
}

如上所示,这样主函数就永远阻塞住了,这里要注意上面一定要有一直活动的goroutine,否则会报deadlock

如果去掉goroutine内的for循环

func main() {

	bufChan := make(chan int)

	go func() {

		bufChan <- 1
		time.Sleep(time.Second)

	}()

	go func() {

		fmt.Println(<-bufChan)

	}()

	select {}
}

则会出现死锁

 

标签:goroutine,bufChan,阻塞,golang,func,main,select
From: https://www.cnblogs.com/wuchangblog/p/16719855.html

相关文章

  • golang语法复习
    标识符大小写当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需......
  • el-select封装(单选框、多选框、全选功能)
    先看看设计图:网上找了一溜,都是扯淡,样式也没个自己动手吧,先把样式搞定popper-class="xx-option"所有单选框都用:after和:before类+定位实现样式逻辑复杂点,再加上......
  • vue +iview Select省市区联动
    因为需要保存的表里只有City_id一个字段,所以这边只保存"区"的值<Rowtype="flex"justify="start"class="code-row-bg"v-show="loginName=='admin'"><Cols......
  • jquery动态为select 绑定数据
      functiongetChapters(courseid){$.ajax({url:'/chapter/getChapersByUidCourseID?courseID='+courseid,su......
  • IfcGeometricSetSelect
    IfcGeometricSetSelect类型定义IfcGeometricSetSelect包括适用于作为几何集一部分的几何表示项。 注:ISO10303-42中的定义:此选择类型标识几何图形集中可能出现的图元......
  • A Graph Convolutional Network with Adaptive Graph Generation and Channel Selecti
    motivation图神经网络已经被证明可以很好的解决长距离的语义依赖。但是之前的方法大多使用固定的图,如依赖于外部解析器生成的图(句法依存图等)图是固定的无法使用梯度......
  • 云原生之旅 - 1)Golang 入门 简单 HTTP Server
    前言本人最近几年一直在学习并且实践云原生,也从测试转型到DevOps,公司的所有服务也从数据中心搬到云端,回顾过去几年学到的知识,觉得是时候总结一下了,所以准备以云原生为题材......
  • [Golang] GO 语言工作环境的基本概念
    1.GOPATH和GOROOT(环境变量)1.GOROOTgo编译器、标准库等安装的地方,所有我们写的代码其实都是文本文件而已,需要编译器等工具将其加工成可执行文件或者库文件才能使用,每......
  • MyBatis标签之Select resultType和resultMap
    摘要:介绍MyBatis中Select标签的两个属性resultType和resultMap及其区别。1MyBatis动态SQL之if语句2MyBatis动态sql之where标签|转3MyBatis动态SQL之set标签|转4M......
  • Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
    场景今天写sql的时候遇到个报错Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggre,查了下大概意思是mysql5.7及以上版本SELECT列表的表达式......