go_channel

  1. go的channel特性
    1. 基本概念
    2. 用法
    3. 特性
    4. 使用channel需要注意

go的channel特性

基本概念

用于在协程之间传递数据,定义

chan T

T表示channel中可以传递的数据类型

ch:=make(chan string,10//可以设置缓冲区大小)

channel是一个管道,数据从一个协程流入管道,再从管道流出到另一个写出,也就是实现协程之间的同步和通信

用法

  1. 发送
    ch <- x //把x发送到channel中
    
    当channel满了之后,发送操作会被阻塞,直到其他协程从channel中取走数据,这样可以保证空间不足的情况下数据不会丢失
  2. 接收
    x:=<- ch
    
    当channel中没有数据时,接收操作会被阻塞,直到有其他协程向channel中发送了数据
  3. 关闭
    chose(ch)
    如果一个channel已经关闭,再向他发送数据会导致panic错误

特性

  • 线程安全
    多个协程可以同时读写一个channel,而不会发生数据竞争的问题。channel实现了锁机制,保证了多个协程之间对channel的访问是安全的
  • 阻塞式发送和接收
  • 顺序性
    通过channel发送的数据是按发送的顺序进行排列的。
  • 可以关闭
    关闭channel之后,其他协程依然可以从中接收数据,但不能向其中发送数据。可以避免内存泄漏的问题
  • 缓冲区大小

使用channel需要注意

  • 避免死锁
  • 避免泄露
  • 避免竞争
  • 避免过度使用

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。