Go语言通道的多路复用——同时处理接收和发送多个通道的数据

作者: adm 分类: go 发布时间: 2023-05-10

什么是通道多路复用?
同时处理接收和发送多个通道的数据

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

举例:

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

多通道操作的两个处理办法
使用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)
    }
}

特点:

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

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!