Go信道

消息机制认为每个并发单元是自包含的、独立的个体,并且都有自己的变量,但在不同并发单元间这些变量不共享。

channel是Go语言在语言级别提供的goroutine间的通信方式,我们可以使用channel在多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。

channel是类型相关的,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。

channel的声明形式为:

var chanName chan ElecmentType

使用内置函数make()定义一个channel:

ch := make(chan int)

在channel的用法中,最常见的包括写入和读出:


写入:ch <- value    // 将一个数据value写入到channel,这会导致阻塞,直到有其他goroutine从这个channel中读取数据

读出:value <- ch    // 从channel中读取数据,如果channel之前没有写入数据,也会导致阻塞,直到channel中被写入数据为止


可以关闭不再使用的channel:close(ch)


创建一个带缓冲的channel:

c := make(chan int, channel个数)

说明:在这个int类型的channel中,即使没有读取方,写入方也可以一直往channel里写入,在这个缓冲区被填充完之前都不会阻塞。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值