一、Channel的作用

go语言一直倡导不要通过共享数据来通信,而要通过通信的方式来进行共享数据。

这个时候就需要用到Channel来进行通信。

二、如何声明Channel

在go语言中使用Make来创建channel。

三、通过Channel 来控制携程输出的顺序

Go语言的协程并发是无序的并不是说排在前面的就会先执行,我们来看下面这个例子

由于Go的主协程并不会等待所有协程结束后在结束,所以这里我们要人为的增加等待控制命令sync.WaitGroup。

使用了这个命令以后主进程在执行完后会被挂起等到所有的协程都执行完毕后在结束主进程。

运行这段代码

我们可以看到输出的是 world hello 并不是我们想要的 hello world 这是因为协程运行的先后顺序不一致导致的。

接下来我们通过引入channel使得协程的按照我们想要顺序输出。

这个时候我们引入了一个bool 型的chan,并在函数的参数中设定了使用通道的方向,规定了say只能发送 say2只能接收。

同时我们在say2函数中引入了select监听机制,她会一直挂起并监听channel,知道收到对应的channel数据后才继续往下操作。

经过这样一番改造,不管那个函数先执行只有当hello 输出以后 world 才会输出。

这就是channel的简单用法之一。


如果你觉得本文对你有所帮助欢迎点赞、收藏、评论~