Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言select

Go语言select

原创
作者头像
IT工作者
发布于 2022-04-01 02:27:45
发布于 2022-04-01 02:27:45
60400
代码可运行
举报
文章被收录于专栏:程序技术知识程序技术知识
运行总次数:0
代码可运行

一、select简介

Golang中select和switch结构特别像,但是select中case的条件只能是I/O

select 的语法(condition是条件)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select{
  case condition:
  case condition:
  default:
}

select执行过程:

每个case必须是一个IO操作

哪个case可以执行就执行哪个

多个case都可以执行,随机执行一个

所有case都不能执行时,执行default

所有case都不能执行,且没有default,将会阻塞

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func main() {
   runtime.GOMAXPROCS(1)
   ch1 := make(chan int, 1)
   ch2 := make(chan string, 1)
   ch1 <- 1
   ch2 <- "hello"
   select {
   case value := <-ch1:
      fmt.Println(value)
   case value := <-ch2:
      fmt.Println(value)
   }
}

select多和for循环结合使用,下面例子演示出了一直在接收消息的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "fmt"
)

func main() {
    ch := make(chan int)
    for i := 1; i <= 5; i++ {
        go func(arg int) {
            ch <- arg
        }(i)
    }
  //如果是一直接受消息,应该是死循环for{},下面代码中是明确知道消息个数
    for i := 1; i <= 5; i++ {
        select {
        case c := <-ch:
            fmt.Println("取出数据", c)
        default:
            //没有default会出现死锁
        }
    }
    fmt.Println("程序执行结束")
}

break可以对select生效,如果for中嵌套select,break选择最近结构

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验