zoukankan      html  css  js  c++  java
  • channel

    1、channel通道是阻塞的,一个协程给通道发送数据,则必须有另一个协程接收数据,否则报错

    可以建立很过个通道,指定哪个协程通过哪个通道读取数据

    package main
    import "fmt"
    import "time"
    
    func main(){
    
    
        var chanels [10]chan int
    
        for i := 0; i < 10; i++ {
    
            chanels[i] = make(chan int)
    
            go doWork(i,chanels[i])
    
        }
    
        for i := 0; i < 10; i++ {
            chanels[i]<-'a'+i
        }
    
    
        time.Sleep(1000*time.Millisecond)
    
    }
    
    
    
    func doWork(i int,c chan int){
    
        for{
    
            fmt.Printf("the work %d,received %d 
    ",i,<-c)
    
        }
    
    }

    2、可以返回一个channel,看下面这个修改

    package main
    import "fmt"
    import "time"
    
    func main(){
    
    
        var chanels [10]chan int
    
        for i := 0; i < 10; i++ {
    
            chanels[i] = createWork(i)
    
            // go doWork(i,chanels[i])
    
        }
    
        for i := 0; i < 10; i++ {
            chanels[i]<-'a'+i
        }
    
    
        time.Sleep(1000*time.Millisecond)
    
    }
    
    
    
    func createWork(i int) chan int{
    
        c := make(chan int)
    
        go func(){
    
            for{
    
            fmt.Printf("the work %d,received %d 
    ",i,<-c)
    
        }
    
        }()
    
        
        return c
    
    }

     下面这个例子的执行结果

    package main
    
    import (
            "fmt"
            "time"
    )
    
    
    
    func say(s string) {
            for i := 0; i < 5; i++ {
                    time.Sleep(100 * time.Millisecond)
                    fmt.Println(s)
            }
    }
    
    
    
    
    func main() {
            go say("world")
            say("hello")
    }

    结果如下

    hello
    world
    world
    hello
    hello
    world
    world
    hello
    world
    hello
    

     发现hello会输出很多次

  • 相关阅读:
    Python 标准库 urllib2 的使用细节
    为什么C++编译器不能支持对模板的分离式编译
    source insight插件
    tar命令
    绘制和重绘,有效矩形和无效矩形
    常量表达式
    区间迭代
    lambda函数
    decltype和新的返回值语法
    auto用法
  • 原文地址:https://www.cnblogs.com/webclz/p/12008585.html
Copyright © 2011-2022 走看看