channel一篇全搞定

什么是channel

channel是一个数据管道,可以往里面写数据,可以从里面读数据,channel是goroutine之间数据通信的桥梁,而且是线程安全的,channel遵循先进先出的原则,写入数据和读出数据都会加锁。

channel的分类

从读写的角度来区分

  • 只读channel,单向channel
  • 只写channel,单向channel
  • 可读可写channel

从是否带有缓冲区来区分

  • 带缓冲区的channel,定义了缓冲区的大小,可以存储多个数据
  • 不带缓冲区的channel,只能存一个数据,并且只有当该数据被取出的时候才能存下一个数据
channel定义和声明

channel 按照声明和定义的方式可以从读写的方式上划分为只读的channel、只写的channel、可读可写的channel; 从带不带缓存区的角度又可以划分为带缓存区的channel和不带缓存区的channel。

readOnlyChan := make(<- chan int)
writeOnlyChan := make(chan <- int)
readAndWriteChan := make(chan int)


readOnlyChan := make(<- chan int,1)
writeOnlyChan := make(chan <- int,1)
readAndWriteChan := make(chan int,1)
对channel的操作方式

针对channel的操作有下面的几种方式,从channel 中读取数据、将数据写入channel、关闭channel

  • 实践一
    ch := make(chan int)
    go func() {
   
        ch <- 10<

你可能感兴趣的:(go,golang)