3.12 Go之通道关闭后继续使用
概念
通道是一个引用,会被垃圾回收机制回收,也可以主动关闭
关闭通道的函数
函数:
close()
被关闭的通道的特点:
- 
被关闭的通道不会被置为 nil
- 
给被关闭的通道发送数据会触发 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)
    }
}
特点:
- 
前两行正确输出带缓冲通道的数据,表明缓冲通道在关闭后依然可以访问内部的数据。 
- 
    It's a lonely road!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号