Go语言提供的消息通信机制被称为channel。
不要通过共享内存来通信,而应该通过通信来共享内存。
channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或多个goroutine之间传递消息。channel是进程间的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针。如果需要跨进程通信,建议使用分布式系统的方法来解决,比如使用Socket或HTTP等通信协议。
channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。
1.基本语法
一般channel的声明形式为:
var chanName chan ElementType
与一般的变量声明不同的地方仅仅是在类型之前加了chan关键字。ElementType指定这个channel所能传递的元素类型。
定义一个channel也很简单,直接使用内置的函数make()即可:
ch := make(chan int)
这就声明了并初始化了一个int型的名为chan的channel。
在channel的用法中,最常见的包括写入和读出。将一个数据写入(发送)至channel的语法很直观,如下:
ch <- value