如何解决如何将 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 还很陌生,所以我想就上述代码寻求反馈。
- 我对第 7 行有一些疑问。我用它来确保匿名函数被“包含”在
ctx
下,因此一旦超时到期就会被杀死和释放,但我不确定我是否已经完成正确的事情。 - 第二件事是,我知道我应该在某个地方拨打
cancel( )
,但我无法确定在哪里。 - 最后,真的欢迎任何反馈,无论是关于效率、风格、正确性或任何方面的反馈。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。