如何将 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 (将#修改为@)