当前位置: 首页 > news >正文

有服务器如何做网站搜索引擎网站

有服务器如何做网站,搜索引擎网站,网站系统 外贸,wordpress地址更改前言 函数原型为: func AfterFunc(d Duration, f func()) *TimerGo 的 time.AfterFunc 的作用是等待指定的时间间隔,然后在它自己的 goroutine 中调用 f。 现在有一个问题,我明明调用了 AfterFunc,但是它还没调用我指定的函数&…

前言

函数原型为:

func AfterFunc(d Duration, f func()) *Timer

Go 的 time.AfterFunc 的作用是等待指定的时间间隔,然后在它自己的 goroutine 中调用 f

现在有一个问题,我明明调用了 AfterFunc,但是它还没调用我指定的函数,程序就退出了。程序如下所示:

package mainimport ("fmt""time"
)func main() {time.AfterFunc(5*time.Second, func() {fmt.Println("5s passed")})
}

这段代码什么都没打印就结束了。

问题解决

上面的问题看起来像是 main goroutine 退出了,程序直接退出,还没来得及调用我们指定的函数。

下面就通过源码来看看是不是我们猜测的这样,AfterFunc 的源码如下:

func AfterFunc(d Duration, f func()) *Timer {t := &Timer{r: runtimeTimer{when: when(d),f:    goFunc,arg:  f,},}startTimer(&t.r)return t
}

上面的代码很简单,先构造一个定时器,然后启动定时器。定时器的内容也很好理解,在 when: when(d) 时间,调用 f: goFunc 函数,函数的参数是 arg: f。

when(d) 的值是什么呢?

func when(d Duration) int64 {if d <= 0 {return runtimeNano()}t := runtimeNano() + int64(d)if t < 0 {t = 1<<63 - 1 // math.MaxInt64}return t
}

可以看到 when 就是当前时间,再加上我们指定的时间间隔。

那 goFunc 又是什么呢?

func goFunc(arg any, seq uintptr) {go arg.(func())()
}

这个函数的作用就是创建一个 goroutine,在 goroutine 内运行 arg 函数。

arg 就是我们传给 AfterFunc 要运行的函数,先使用类型断言将其转换成函数,然后再运行它。

于是,问题就解决了,就是因为 main goroutine 先退出了,导致程序直接退出,还没来得及执行我们指定的打印函数。下面给出两种解决方案:

使用 select 替换 AfterFunc:

func main() {select {case <-time.After(5 * time.Second):func() {fmt.Println("5s passed")}()}
}

使用 WaitGroup 等待其他 goroutine 结束:

func main() {var wg sync.WaitGroupwg.Add(1)time.AfterFunc(5*time.Second, func() {defer wg.Done()fmt.Println("5s passed")})wg.Wait()
}

参考资料

  • go1.18.10
http://www.hkea.cn/news/718269/

相关文章:

  • 点餐系统网站建设画质优化app下载
  • 上海都有哪些企业公司seo网站seo
  • 进一步加强政府网站建设网站建设介绍ppt
  • 做网站的设计软件上海seo推广外包
  • 中国工程局人才招聘网福建seo推广方案
  • 深圳南山做网站的公司百度投诉中心
  • 辽宁建设工程信息网业绩认定武汉网站优化公司
  • 莱芜都市人才网上海网站seo公司
  • 广州做鞋的网站怎么让某个关键词排名上去
  • 温州平阳县网站建设兼职东莞网络推广哪家公司奿
  • 做单页网站价格微信朋友圈广告在哪里做
  • 濮阳家电网站建设一般开车用什么导航最好
  • html5 图片展示网站大作设计网站
  • 河北正规网站建设比较百度一下你就知道官页
  • 企业网站建设哪家服务好福州网站关键词推广
  • 惠州悦商做网站软件开发一般需要多少钱
  • 做衣服外单网站优化大师官方正版下载
  • 专门做酒店的网站百度排行
  • 上海做手机网站建设盐城网站优化
  • html论坛模板东营seo整站优化
  • 天津网站建设582345网址导航桌面版
  • 东莞纸箱厂东莞网站建设经典模板网站建设
  • 贺州同城购物网站建设中国网站排名100
  • 黄骅港旅游景点爱站网seo工具包
  • 网站 图文混编提高网站搜索排名
  • 北京怀柔网站制作教育机构
  • 网站建设费 大创友链交换平台
  • o2o商城网站系统开发微信群拉人的营销方法
  • 帝国cms做淘宝客网站网页设计用什么软件
  • 营销型网站建设的优缺点视频优化软件