美文网首页
Golang的通道简介以及通道的作用

Golang的通道简介以及通道的作用

作者: TZX_0710 | 来源:发表于2019-12-06 09:54 被阅读0次

    chanel通道,在golang的变量为chan,为什么要单独开一章出来讲解呢,主要是chan是一个挺重要的东西,并且在golang并发当中是一个完美的调和剂。

    通道的特性

    Go语言中的通道(channel)是一种特殊的类型。在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。goroutine 间通过通道就可以通信。
    通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。

    package main
    
    import (
        "fmt"
        "github.com/astaxie/beego/logs"
        "sync"
        "time"
    )
    var waitGorup sync.WaitGroup
    //发送消息
    func P(queue chan<- int){
        for i:= 0; i < 1000; i++{
            queue <- i
        }
        time.Sleep(time.Second)
    }
    //读取消息  通道为只读
    func C(queue <-chan int){
        for data := range queue {
            logs.Info(data)
        }
    }
    
    func main(){
        //声明一个双向通道
        ints := make(chan int, 10)
        //通道名称chan<-类型 只写
        //通道名称<-chan 类型  只读
        //声明一个只能写入的通道
        //sendInts:=make(chan<-int,10)
        ////声明一个只能读取的通道
        //recever:=make(<-chan  int,10)
        waitGorup.Add(2)
        queue := ints // 这里的10表示管道的容量,根据应用的需求进行设置
        //传入一个双向通道会进入函数会转换成一个 单项通道 只写
        go P(queue)
        //传入一个双向通道会进入函数会转换成一个 单项通道 只读
        go C(queue)
        //for循环读取通道中的数据
        var input string
        fmt.Scan(&input)
        close(queue)
        <-queue
    }
    

    相关文章

      网友评论

          本文标题:Golang的通道简介以及通道的作用

          本文链接:https://www.haomeiwen.com/subject/lkidgctx.html