码迷,mamicode.com
首页 > 其他好文 > 详细

channel

时间:2019-12-09 01:46:21      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:ane   div   sha   port   ack   另一个   main   mil   time   

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

标签:ane   div   sha   port   ack   另一个   main   mil   time   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!