golang判断chan channel是否关闭的方法_Golang

本文实例讲述了golang判断chan channel是否关闭的方法。分享给大家供大家参考,具体如下:

群里有朋友问,怎么判断chan是否关闭,因为close的channel不会阻塞,并返回类型的nil值,会导致死循环.在这里写个例子记录一下,并且分享给大家

如果不判断chan是否关闭

Notice: 以下代码会产生死循环

复制代码 代码如下:

package main
import (
    "fmt"
)
func main() {
    c := make(chan int, 10)
    c <- 1
    c <- 2
    c <- 3
    close(c)
    for {
        fmt.Println(<-c)
    }
}

判断短chan是否关闭

复制代码 代码如下:

package main
import (
    "fmt"
)
func main() {
    c := make(chan int, 10)
    c <- 1
    c <- 2
    c <- 3
    close(c)
    for {
        i, isClose := <-c
        if !isClose {
            fmt.Println("channel closed!")
            break
        }
        fmt.Println(i)
    }
}

希望本文所述对大家Go语言程序设计有所帮助。

时间: 2024-11-10 01:31:00

golang判断chan channel是否关闭的方法_Golang的相关文章

js判断子窗体是否关闭的方法_javascript技巧

本文实例讲述了js判断子窗体是否关闭的方法.分享给大家供大家参考.具体如下: function InsideMessageAdd() { //window.open()得到子窗体 tip = OpenDialog('UploadFile.html?tp=nbtz', 'msg', 650, 180); //启动timer,判断子窗体是否关闭 timer = window.setInterval("IfWindowClosed()", 500); } var timer; var tip

用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)_javascript技巧

Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定.区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行. Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取:而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调

Javascript判断页面刷新或关闭的方法(转)

onbeforeunload与onunload事件 Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定.区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行. Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取:而onunload则已经从服务器

Go语言判断指定文件是否存在的方法_Golang

本文实例讲述了Go语言判断指定文件是否存在的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main    import (     "fmt"     "os" )    func main() {     f, err := os.Open("dotcoo.com.txt")     if err != nil && os.IsNotExist(err) {         fmt.Pri

golang实现通过smtp发送电子邮件的方法_Golang

本文实例讲述了golang实现通过smtp发送电子邮件的方法.分享给大家供大家参考,具体如下: 今天写了一个公司的邮件发送后台服务,php只需要把邮件存入数据库,然后golang写的mailservice就会吧邮件发送出去.这个公司的代码就不发出来的,以为带有公司的业务逻辑,我把代码整理了一下发布出来供大家参考.呵呵 复制代码 代码如下: package main import (     "fmt"     "net/mail"     "net/smt

sqlserver进程死锁关闭的方法_MsSql

1.首先我们需要判断是哪个用户锁住了哪张表. --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 查询后会返回一个包含spid和tableName列的表. 其中spid是进程名,tableName是表名. 2.了解到了究竟是哪个进程锁了哪张表后,需要通过进程找到锁

QTabWidget标签实现双击关闭的方法(推荐)_java

用Qt做ARM,发现Qt4中QTabWidget原生的关闭按键(X)太小,用触摸板很难按到.于是乎想到类似于浏览器的双击关闭功能,因为之前做过C#的资源管理器,以为可以直接绑定DoubleClick,可后来翻遍了也没找到相应的SLOT,结果在QWidget中捕捉信号,就是没有QTabWidget标签的鼠标事件,坑爹那!随后,又在网上各种搜索,结果找到的是各种问题,每一个准确回答出来的.....最后思来想去,实在不行,就用最笨的方法,仿Hock实现! 于是乎,我重载了QTabWidget(由于ta

sqlserver进程死锁关闭的方法

1.首先我们需要判断是哪个用户锁住了哪张表. --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 查询后会返回一个包含spid和tableName列的表. 其中spid是进程名,tableName是表名. 2.了解到了究竟是哪个进程锁了哪张表后,需要通过进程找到锁

Lua判断Table是否为空的方法

这篇文章主要介绍了Lua判断Table是否为空的方法(空的table即{}),如何判断lua中的table是否是空的table呢,本文就试验了多个方法,最后得出比较好的判断方法,需要的朋友可以参考下 判断方法结论: 代码如下: a={} if next(a) ~=nil then dosomething end 最近在项目里面大量使用的lua,其中lua的table是lua中重要的数据结构,可以被用来当做C++中的数组,vector,map来使用. 如何判断lua中的table是否是空的tabl