channel
Posted webclz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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会输出很多次
以上是关于channel的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Channel 通道 ④ ( Channel 通道的热数据流属性 | Channel 通道关闭过程 | Channel 通道关闭代码示例 )
FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法
FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法
FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法