Go语言通道的多路复用——同时处理接收和发送多个通道的数据
什么是通道多路复用?
同时处理接收和发送多个通道的数据
表示在一个信道上传输多路信号或数据流的过程和技术
举例:
电话是一个典型的多路复用设备,在一条线路上可以同时接收或发送数据
多通道操作的两个处理办法
使用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) } }
特点:
死循环向通道当中发送值,所以一直会输出接收到的值