• 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)
      }
    }

    特点:

    • 前两行正确输出带缓冲通道的数据,表明缓冲通道在关闭后依然可以访问内部的数据。

    • 在通道关闭后,即便通道没有数据,在获取时也不会发生阻塞,但此时取出数据会失败

  • 相关阅读:
    Linux(CentOS)下squid代理服务器配置-五岳之巅
    用类实现二叉树
    django--02 模板的使用
    django --01 helloworld样例入门
    微指数爬虫
    celery_01 _celery安装启动
    python多线程几种方法实现
    crontab问题处理
    python可视化--matplotlib
    python网页爬虫--京东家电版块
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/16033299.html
Copyright © 2020-2023  润新知