网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

golang怎么正确关闭计时器

这篇文章主要为大家展示了“golang怎么正确关闭计时器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“golang怎么正确关闭计时器”这篇文章吧。

创新互联是一家专业提供尖扎企业网站建设,专注与成都做网站、网站设计、外贸营销网站建设H5响应式网站、小程序制作等业务。10年已为尖扎众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

描述

  • go的官方库计时器, 有一个陷阱,ticker.Stop()如果不注意会导致协程无法关闭。

  • 如果我们想强制中断计时,该如何做?

示例:ticker.Stop()会导致协程无法结束

下面示例便于理解

func main(){
    ticker := time.NewTicker(time.Second*10)
    go func(){
        log.Println("go start")
        select{
        case <-ticker.C:
            log.Println("ticker stop")
        }
        //会发现这一句化一直不打印
        log.Println("go end")
    }()
    time.Sleep(1)
    //stop无法结束上面的协程
    ticker.Stop()
    time.Sleep(20)
    log.Println("main end")
}

使用标记值终止计时器

func WaitResponse(queueChan *chan Packet, timeout time.Duration) *Packet, error{
    ticker := time.NewTicker(time.Second*timeout)
    defer ticker.Stop()

	var response Packet

	var err error
	select{
	case response = <-*queueChan:
        if response == "标记值xxx"{
            return nil, errors.New("terminate response")
        }
	case <-ticker.C:
		err = errors.New("wait response timeout")
	}
	return &response, err
}

go WaitResponse(queueChan, time.Duration(60))

queueChan <- "标记值xxx"

以上是“golang怎么正确关闭计时器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


当前名称:golang怎么正确关闭计时器
分享地址:http://bjjierui.cn/article/jieeho.html

其他资讯