zoukankan      html  css  js  c++  java
  • go15---select

    package main
    
    import (
        "fmt"
    )
    
    //go语言提供了一个结构或者形式来帮助处理多个channel的发送和接收问题,这个结构叫做select,
    //select和switch相近,但是select是专门针对channel的,可以同时处理多个channel的发送与接收,
    //当多个channel可以发送和接收的时候,按随机顺序处理,然后把一个个任务处理完,
    
    func main() {
        o := make(chan bool, 2) //缓存为2的channel
    
        c1, c2 := make(chan int), make(chan string)
        go func() { //go后面接上匿名函数
            for { //无限循环,因为一次select之后就select代码执行完了,不使用无线循环代码就只会接收一次
                //一般都是通过无限循环来实现不断的信息接收与发送操作
                select {
                case v, ok := <-c1:
                    { //取出c1的值,v都是局部变量,不会打架,
                        if !ok { //ok=false,c1这个channel被关闭的时候(close(c1)),
                            o <- true //close(c1)的时候向o写入一个true
                            break     //退出selecrt
                        }
                        fmt.Println("c1:", v) //打印c1的值
                    }
                case v, ok := <-c2:
                    { //取出c2的值
                        if !ok {
                            o <- true //close(c2)的时候向o写入一个true
                            break
                        }
                        fmt.Println("c2:", v)
                    }
                }
            }
    
        }()
    
        c1 <- 1
        c2 <- "c2"
        c1 <- 3
        c2 <- "c22"
        close(c1)
        close(c2)
    
        for i := 0; i < 2; i++ {
            <-o //o取2次,再让main函数执行完毕
        }
    }
    
    /*
        c1: 1
        c2: c2
        c1: 3
        c2: c22
    */
  • 相关阅读:
    Laravel框架中的event事件操作
    PHP魔术方法实例
    PHP 面向对象
    ThinkPHP中where()使用方法详解
    PHP常见错误提示含义解释
    php面向对象编程self和static的区别
    php文件路径获取文件名
    php三种无限分类
    php高精度计算问题
    转:JavaScript定时机制、以及浏览器渲染机制 浅谈
  • 原文地址:https://www.cnblogs.com/yaowen/p/8082613.html
Copyright © 2011-2022 走看看