iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言select语句用法示例
  • 885
分享到

Go语言select语句用法示例

2024-04-02 19:04:59 885人浏览 独家记忆
摘要

目录用法使用场景实现收发功能注意事项用法 多个通道 Channel 中信息的发送和接受处理的专用的语句—select 语句。select 语句会阻塞,直到其中的一个发送/

用法

多个通道 Channel 中信息的发送和接受处理的专用的语句—select 语句。select 语句会阻塞,直到其中的一个发送/接收操作准备好。select 语句和 switch 语句有点相似,但 select 语句在被执行时会选择执行其中的一个分支,且选择分支的方法完全是不相同的。

ch1 = make(chan string)
ch2 = make(chan string)
ch1 <- "server1"
ch2 <- "server1"
select {
    case i := <- ch1:
      fmt.Printf("从ch1读取了数据%d", i)
    case j := <- ch2:
      fmt.Printf("从ch2读取了数据%d", i)
    default:
      fmt.Printf("no action...", i)
}

以上代码中,每个 case 后都只针对某个通道的接收语句,这个和 switch 不同,也没有 break。switch 语句右边是一个switch 表达式,但 select 右边是接大括号。

开始执行 select 语句时,所有跟在 case 关键字右边的表达式都会被求值,求值的顺序是自上而下,从左到右的。

使用场景

实现收发功能

select 是控制 channel 必不可少的部分,channel 的主要功能就是收发信息,基于此可以设计一个生产者消费者功能。生产者发送消息,消费者接受消息

func main(){
// 生产数据,将数据写入 channel 
  n1 := make(chan int)
    Go func() {
        i := 0
        for {
            time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
            n1 <- i
            i++
        }
    }()
    n2 := make(chan int)
    go func() {
        i := 0
        for {
            time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
            n2 <- i
            i++
        }
    }()
// 从 channel 中读取到数据就输出
    for {
        select {
        case n := <-n1:
            fmt.Printf("从ch1读取了数据%d", n)
        case n := <-n2:
            fmt.Printf("从ch1读取了数据%d", n)
        }
    }
}

注意事项

  • select 只能用于 chan 的 IO 操作
  • select 的 case 都是并行的,case 读取到数据就执行,但是如果没有读取到且未设置 default 将导致阻塞
  • 尽量设置 default 避免没有 IO 操作发生时,select 语句一直阻塞,直到某个 case 分支命中
  • 如果是空的 select 有可能会引起死,所以在 select 执行过程中,必须命中某一 case 分支
select {}
  • 防止阻塞还有一个方法:设置超时

以上就是Go语言select语句用法示例的详细内容,更多关于Go select语句的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言select语句用法示例

本文链接: https://www.lsjlt.com/news/120996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言select语句用法示例
    目录用法使用场景实现收发功能注意事项用法 多个通道 Channel 中信息的发送和接受处理的专用的语句—select 语句。select 语句会阻塞,直到其中的一个发送/...
    99+
    2022-11-11
  • Go语言基础if条件语句用法及示例详解
    目录概述语法格式规则 概述 条件语句需要开发者通过指定一个或多个条件 并通过测试条件是否为 true 来决定是否执行指定语句 并在条件为 false 的情况再执行另外的语句。 语法 ...
    99+
    2022-11-12
  • sql中select语句的使用示例
    这篇文章主要介绍了sql中select语句的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL SELECT 语句SEL...
    99+
    2022-10-18
  • Go语言中循环语句使用的示例详解
    目录一、概述1. 循环控制语句2. 无限循环二、Go 语言 for 循环1. 语法2. for语句执行过程3. 示例4. For-each range 循环三、循环嵌套1. 语法2....
    99+
    2022-11-13
  • Go语言基础for循环语句的用法及示例详解
    目录概述语法注意示例一  死循环,读取文件示例二  打印乘法表示例三  遍历字符串,数组,map 概述 for循环是一个循环控制结构,可以执行指定次数的...
    99+
    2022-11-12
  • go语言中如何使用select的实现示例
    目录1.基本语法2.select语句的实际应用在golang语言中,select语句 就是用来监听和channel有关的IO操作,当IO操作发生时,触发相应的case动作。...
    99+
    2022-11-13
  • C语言示例讲解ifelse语句的用法
    目录1、前言2、if语句的语法结构3、关于if else语句的示例4、if else 书写形式的对比5、例子1、前言 (1)C语言是结构化的程序设计语言。C语言的三种基本程序结构分别...
    99+
    2022-11-13
  • Go语言中defer语句的用法
    可以用作一些资源的释放。 1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构) func DeferTest1(){ defer fmt.Printl...
    99+
    2022-11-13
  • Go语言基础switch条件语句基本用法及示例详解
    目录概述语法第一种【switch 带上表达式】第二种【switch 不带表达式】第三种【switch 初始化,表达式】注意示例一【根据今天的日期打印今天星期几】示例二【根据分数打印A...
    99+
    2022-11-12
  • go语言编程之select信道处理示例详解
    目录select信道处理fibonacci数列监听select监听协程select信道处理 注意:有default就不会阻塞 package main func main() { ...
    99+
    2022-11-13
  • C语言示例讲解while循环语句的用法
    目录1、while语句结构2、代码示例在学习和回顾该知识前,已经掌握了if语句的结构和用法。 if (条件)    语句; 当条件满足的情况下,if结构...
    99+
    2022-11-13
  • C语言示例讲解switch分支语句的用法
    目录1、了解switch分支语句2、示例3、default子句4、练习1、了解switch分支语句 switch语句也是一种分支语句,常常用于多分支的情况。 比如: 输入1,就会输出...
    99+
    2022-11-13
  • go语言if语句的用法是什么
    Go语言的if语句用于根据条件判断来执行不同的代码块。if语句的基本语法如下: if condition { // 执行语句...
    99+
    2023-10-21
    go语言
  • GO语言的控制语句详解包括GO语言的指针语法
    GO语言的控制语句 判断结构:if-else 和大多数编程语言一样,if-else的用法基本都一样,直接来一个GO语言的例子 package main import ( "f...
    99+
    2022-12-19
    GO语言的控制语句详解 GO语言指针语法 GO语言switch结构 GO语言for结构
  • C语言select语句的基本使用方法有哪些
    C语言中的select语句是一种条件判断语句,用于根据不同的条件执行不同的操作。它的基本使用方法如下:1.基本语法```select...
    99+
    2023-06-14
    select语句
  • C语言示例讲解do while循环语句的用法
    目录1、do while()循环-先执行后判断2、do while中的break以及continue3、练习4、猜数字游戏1、do while()循环-先执行后判断 do语句的语法 ...
    99+
    2022-11-13
  • Go语言基础go接口用法示例详解
    目录概述语法定义接口实现接口空接口接口的组合总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法 定义接口 type [接口名] inte...
    99+
    2022-11-12
  • go语言中怎么使用select
    这篇文章主要介绍“go语言中怎么使用select”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中怎么使用select”文章能帮助大家解决问题。在golang语言中,select语句...
    99+
    2023-06-30
  • go语言条件语句的用法是什么
    Go语言的条件语句主要有if语句和switch语句。 if语句的基本语法如下: if condition { // 如果条件为...
    99+
    2023-10-21
    go语言
  • Verilog语言的循环语句示例详解
    目录关键词:while, for, repeat, foreverwhile 循环for 循环repeat 循环forever 循环关键词:while, for, repeat, f...
    99+
    2023-05-15
    Verilog语言循环语句 Verilog 循环
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作