golang使用select {}

Posted JavaPub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang使用select {}相关的知识,希望对你有一定的参考价值。

文章目录

场景

有时我们需要让应用不退出,在后台一直运行着。

永远阻塞的作用在哪里呢? 当我们开发一个程序的时候,main函数千万不能在子协程干完活前退出,不然所有的子协程就都被迫退出了。服务也就被迫停止了。

一般会使用 channel,这里介绍下 ​​select​


代码

func main() 
for i := 0; i < 10; i++ //启动20个协程处理消息队列中的消息
c := consumer.New()
go c.Start()

select // 阻塞

讲解

select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。

select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。

package main

import "fmt"

func main()
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
ch1 <- 1
ch2 <- 1

select
case <-ch1:
fmt.Println("ch1 pop one element")
case <-ch2:
fmt.Println("ch2 pop one element")
/* 你可以定义任意数量的 case */
default: /* 可选 */
fmt.Println("default! ")

【golang】使用select


无限循环

select

以上是关于golang使用select {}的主要内容,如果未能解决你的问题,请参考以下文章

golang使用select {}

golang的select用法

golang select

golang golang_chan_select_timeout.go

Golang 基础:原生并发 goroutine channel 和 select 常见使用场景

Golang 基础:原生并发 goroutine channel 和 select 常见使用场景