Should I reuse context.Background() in go?

huangapple go评论81阅读模式
英文:

Should I reuse context.Background() in go?

问题

假设我有100个goroutine,它们使用context.WithDeadline(emptyCtx, ...)发送gRPC请求。

我是否有理由在所有子上下文中使用相同的全局'emptyCtx'呢?
context.WithDeadline(emptyCtx, ...)
或者如果我只使用context.WithDeadline(context.Background(), ...),是否可以?

我特别关注内存方面的问题(调查内存泄漏)。

英文:

Lets say I have 100 go routines that send gRPC request using context.WithDeadline(emptyCtx, ...)

Is there a reason for me to use the same global 'emptyCtx' for all child contexts?
context.WithDeadline(emptyCtx, ...)
or is it ok if I just use context.WithDeadline(context.Background(), ...)

I'm looking specifically memory-wise (investigate a memory leak)

答案1

得分: 1

如果多次调用context.Background,并没有什么本质上的坏处。在1.18版本中,它每次都返回相同的单个值,而且未来也没有太大的改变的理由。

在代码审查中,我仍然会对此提出疑问,但只是为了以后添加全局截止时间或值时不会变得麻烦。在实践中,将上下文参数放在适当的位置是一个好习惯。

英文:

Nothing inherently bad happens if you call context.Background several times. In 1.18 it returns the same single value every time, and there is little reason why that would change in the future.

In a code review, I would still question it, but only so it doesn't become a pain to add global deadlines or values later. It's just good practice to have context arguments in place.

huangapple
  • 本文由 发表于 2022年7月5日 15:59:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/72865920.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定