go15---select

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
*/

 

以上是关于go15---select的主要内容,如果未能解决你的问题,请参考以下文章

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

golang代码片段(摘抄)

npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段

为每个片段添加一个操作栏

windows通过Visual Studio Code中配置GO开发环境(转)