微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 goroutine 包含到上下文中?

如何解决如何将 goroutine 包含到上下文中?

我正在开发一个 Go 项目,该项目需要在单独的 goroutine 中调用启动函数 (initFunction)(以确保此函数不会干扰项目的其余部分)。 initFunction 不能超过 30 秒,所以我想我会使用 context.WithTimeout。最后,initFunction 必须能够将错误通知调用者,所以我想到了建立错误通道并从匿名函数调用 initFunction 来接收和报告错误

func RunInitGoRoutine(initFunction func(config string)error) error {

    initErr := make(chan error)
    ctx,cancel := context.WithTimeout(context.Background(),30*time.Seconds)

    go func() {
        <-ctx.Done()  // Line 7
        err := initFunction(config)
        initErr <-err
    }()

    select {
    case res := <-initErr:
        return res.err
    case <-ctx.Done():
        err := errors.New("Deadline")
    return err
    }
}

我对 Go 还很陌生,所以我想就上述代码寻求反馈。

  1. 我对第 7 行有一些疑问。我用它来确保匿名函数被“包含”在 ctx 下,因此一旦超时到期就会被杀死和释放,但我不确定我是否已经完成正确的事情。
  2. 第二件事是,我知道我应该在某个地方拨打 cancel( ),但我无法确定在哪里。
  3. 最后,真的欢迎任何反馈,无论是关于效率、风格、正确性或任何方面的反馈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。