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


    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)
      }
    }

    特点:

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

  • 相关阅读:
    转载: SQLyog连接MySQL8 异常2059Authentication plugin 'caching_sha2_password' cannot be loaded解决方案
    linux 运维知识主页
    解决Xshell连接远程linux服务器,关闭Xshell程序对应的运行程序也相
    WPF布局控件
    WPF属性
    AutoMapper 四啥注意
    引用类型和值类型
    蠢鸟之xamarin.forms下面加载字体之二
    一头好奇的猫(庆军)之AES ECB模式C#要跟JAVA一致的话需要注意的
    加班
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/16033292.html
Copyright © 2020-2023  润新知