内容简介:通道(channel)是可以传递数据的一个数据结构。用操作符比如,
通道(channel)是可以传递数据的一个数据结构。
用操作符 <-
指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
比如,
Chanel <- data // 把 data 发送到通道 Chanel value := <-chanel // 从 Chanel 接收数据赋值给value
通道可以给两个 goroutine 之间传递一个指定类型的值来同步运行和通讯。以如下代码为例,
新建文件grammar4_channel.go,
grammar4_channel.go
package basicGrammar import "fmt" //将通道来的数组元素挨个连接 func connectContent(str [] string,channel chan string){ content := "" for _,v:=range str{ content += v } channel<- content } func TestChannel(){ //数组 str:=[]string{"天","地","雨","风","大陆","长空"} //定义一个通道 channel := make(chan string) //调用通道 go connectContent(str[:2],channel) go connectContent(str[2:4],channel) go connectContent(str[4:],channel) //显示结果 x,y,z:= <-channel,<-channel,<-channel fmt.Println(x,y,z) //此处关闭通道,后面就没有结果打印出来了 close(channel) go connectContent(str[:2],channel) v:= <-channel fmt.Println(v) }
这段代码是通过协程将string数组的元素组合,完成后将组合的值返回并打印。通道的产生是make函数,关闭使用close函数。
上面代码运行结果如下,
大陆长空 天地 雨风
如果将close函数注释掉,则结果是这样
大陆长空 天地 雨风 天地
通道也可以设置缓冲,也是在make时指定缓冲,比如格式如下,
ch := make(chan int, 300)
由于缓冲区的大小是有限的,所以还是必须有接收端来接收数据的,否则缓冲区一满,数据发送端就无法再发送数据了。
另外通道的关闭是这样的,通道接收不到数据后 ,或者本次发送的数据全部收到后,这时通道就可以使用 close() 函数来关闭。如果不关闭接收方在有值可以接收之前会一直阻塞。
代码下载(包含前面全部测试代码): https://download.csdn.net/upload/10990662
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang 并发,有缓存通道,通道同步案例演示
- 科普 | 菜鸟学习状态通道,Part-2:App 定制型状态通道
- golang通道定义
- 通道 | Java NIO
- Go 通道
- golang 通道channel 基础
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。