zoukankan      html  css  js  c++  java
  • [GO]通道的关闭

    并不是往通道里放多少次数据,就必须取多次少数据的(之前的例子都是放3次取3次,放10次取10次),我们可以做一个操作,当子协程没有新放入的时候,主协程不再去取,这就是关闭通道

    package main
    
    import "fmt"
    
    //channel并不像文件那样需要经常去关闭它,只有当你确实没有任何发送数据了,或者是你想显示的结束range循环之类的,才去关闭channel
    //关闭channel后,无法向channel再发送数据(引发panic错误后导致接收立即返回零值)
    //关闭channel后,可以继续向channel接收数据
    //对于nil channel,无论收发都会被阻塞
    
    func main() {
        ch := make(chan int)
        go func() {
            for i:=0; i<5; i++ {
                ch <- i
            }
            close(ch) //关闭channel
        }()
        for true {
            //如果OK为true,则说明通道没有关闭
            if num, ok := <-ch; ok==true{
                fmt.Println("num = ", num)
            }else {
                break
            }
        }
      //上面的这段死循环也可以使用下面的实现,更简便
      for num := range ch {
      fmt.Printf("num = ", num)
      }
    }

    执行结果

    num =  0
    num =  1
    num =  2
    num =  3
    num =  4
  • 相关阅读:
    windows下安装mysql教程
    git基本操作
    JDK8,Optional
    重新安装MySQL 8出现的问题
    HTML5学习:缩略图
    HTML5学习:表格
    MySQL常用命令
    Django学习:创建admin后台管理站点
    Django学习:连接Mysql数据库
    Django学习:创建第一个app
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9674599.html
Copyright © 2011-2022 走看看