首页 > 其他 > 详细

channel

时间:2019-12-09 00:51:19      阅读:91      评论:0      收藏:0      [点我收藏+]

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 \n",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 \n",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会输出很多次

channel

原文:https://www.cnblogs.com/webclz/p/12008585.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!