登录
首页 >  Golang >  Go问答

无限重启的Go例程运行

来源:stackoverflow

时间:2024-02-07 12:27:23 473浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《无限重启的Go例程运行》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在将 typescript 项目重写为 golang,但遇到了问题:

我正在运行一个 for 循环,它在程序加载时启动异步工作线程。如果我理解正确的话,go 例程是一种同时运行异步代码的方法。我想做的是一旦完成就无限期地重新启动该函数。

在 typescript 中它看起来像这样

async function init() {
  const count = async Users.getCount();

  // run all workers concurrently
  for (let i = 0; i < count; i += PER_WORKER) {
    const id = i / PER_WORKER;
    worker(id);
  }
}

async worker(id: number) {
  await new Promise((resolve) => {
    // do stuff
    resolve();
  })

  // restart function
  worker(workerId);
}

在 go 中我有非常相似的东西,但是当重新调用里面的函数时,它只会变得一团糟?我想过按时间间隔运行该函数,但我无法提前知道它需要花费的时间...

谢谢 nvh


正确答案


我想做的是在函数完成后无限期地重新启动该函数。

当然,你需要一个永远循环:

for {
    f()
}

如果您想脱离永远循环本身,请将其放入函数中并使用 go 调用它:

go func() {
    for {
        f()
    }
}()

也就是说,我们剥离了 for 循环本身; for 循环每次调用我们的函数一次。这样做:

for {
    go f()
}

这是错误的,因为它会尽可能快地无限次地旋转 f(),而无需等待 f() 返回。

今天关于《无限重启的Go例程运行》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>