ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.11 Go之通道多路复用--->同时处理接收和发送多个通道的数据

2022-03-21 09:37:09  阅读:196  来源: 互联网

标签:case ch 3.11 --- 操作 接收 select 通道


3.11 Go之通道多路复用--->同时处理接收和发送多个通道的数据

什么是通道多路复用?

  1. 同时处理接收和发送多个通道的数据

  2. 表示在一个信道上传输多路信号或数据流的过程和技术

举例:

电话是一个典型的多路复用设备,在一条线路上可以同时接收或发送数据

多通道操作的两个处理办法

  • 使用for循环进行通道处理遍历

  • 使用select关键字进行多通道响应

for循环进行通道遍历

for{
   // 接收ch1通道
   data, ok := <-ch1
   // 接收ch2通道
   data, ok := <-ch2
   // 接收后续通道
   ...
}

select关键字进行通道遍历

select{
   case 操作1:
  响应操作1
   case 操作2:
  响应操作2
   ...
   default:
  没有操作的情况
}

select的特点:

select不像switch,后面并不带判断条件,而是直接去查看 case语句。每个case语句都必须是一个面向channel的操作

注意:

  • 操作1、操作2是指:通道收发语句

操 作语句示例
接收任意数据 case <- ch;
接收变量 case d := <- ch;
发送数据 case ch <- 100;
  • default:没有任何操作时,默认执行default条件中的语句

示例:

package main

import "fmt"

/*
声明一个通道
使用死循环+select选择器进行通道操作
*/
func main() {
   ch := make(chan int, 1)

   // 开始循环对通道进行操作
   for {
       select {
       case ch <- 0:
       case ch <- 1:
      }

      // 赋值并打印
      i := <-ch
      fmt.Println("接收到的值是:", i)
  }
}

特点:

死循环向通道当中发送值,所以一直会输出接收到的值

标签:case,ch,3.11,---,操作,接收,select,通道
来源: https://www.cnblogs.com/JunkingBoy/p/16033292.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有