其他分享
首页 > 其他分享> > 3.12 Go之通道关闭后继续使用

3.12 Go之通道关闭后继续使用

作者:互联网

3.12 Go之通道关闭后继续使用

概念

通道是一个引用,会被垃圾回收机制回收,也可以主动关闭

关闭通道的函数

函数:

close()

被关闭的通道的特点:

  1. 被关闭的通道不会被置为nil

  2. 给被关闭的通道发送数据会触发panic

向已关闭的通道发送数据会发生阻塞

package main

import "fmt"

/*
Goroutine对通道进行关闭以后在向通道当中发送数据
*/
func main() {
   // 创建一个整型的通道
   ch := make(chan int)

   // 关闭通道
   close(ch)

   // 打印通道相关内容
   fmt.Printf("ptr:%p cap:%d Len:%d\n", ch, cap(ch), len(ch))

   // 关闭后在向通道当中发送信息
   ch <- 1
}

向已关闭的通道接收数据不会发生阻塞

从已经关闭的通道数据或者正在接收数据时,将会接收到通道值雷子那个的零值,然后停止阻塞并返回

package main

import "fmt"

/*
向关闭的通道当中接收数据
*/
func main() {
   // 声明一个channel
   ch := make(chan int, 2)

   // 向channel当中发送两个值
   ch <- 0
   ch <- 1

   // 关闭通道
   close(ch)

   // 遍历缓冲的所有数据,多个遍历
   for i := 0; i < cap(ch)+1; i++ {
       // 从通道中读取数据
       v, ok := <-ch

       // 打印结果和状态
       fmt.Println(v, ok)
  }
}

特点:

标签:接收数据,ch,3.12,关闭,Go,main,fmt,通道
来源: https://www.cnblogs.com/JunkingBoy/p/16033299.html