go的channel特性
基本概念
用于在协程之间传递数据,定义
chan T
T表示channel中可以传递的数据类型
ch:=make(chan string,10//可以设置缓冲区大小)
channel是一个管道,数据从一个协程流入管道,再从管道流出到另一个写出,也就是实现协程之间的同步和通信
用法
- 发送
当channel满了之后,发送操作会被阻塞,直到其他协程从channel中取走数据,这样可以保证空间不足的情况下数据不会丢失ch <- x //把x发送到channel中
- 接收
当channel中没有数据时,接收操作会被阻塞,直到有其他协程向channel中发送了数据x:=<- ch
- 关闭
chose(ch)
如果一个channel已经关闭,再向他发送数据会导致panic错误
特性
- 线程安全
多个协程可以同时读写一个channel,而不会发生数据竞争的问题。channel实现了锁机制,保证了多个协程之间对channel的访问是安全的 - 阻塞式发送和接收
- 顺序性
通过channel发送的数据是按发送的顺序进行排列的。 - 可以关闭
关闭channel之后,其他协程依然可以从中接收数据,但不能向其中发送数据。可以避免内存泄漏的问题 - 缓冲区大小
使用channel需要注意
- 避免死锁
- 避免泄露
- 避免竞争
- 避免过度使用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。