golang context 的相关使用

2020-11-23 16:45:27 +08:00
 shhch

如题,之前的项目中没有使用 context,高并发的场景下,日志都难以定位问题,于是准备在所有逻辑函数中加上 context (工作量有点大),并为每次请求带上 id 标识;

但是除此之外就没有其他作用了,就有点怀疑是否有必要;

有没有大佬介绍下实际中的其他使用场景和方式?( With 系列目前也没有发现有什么使用场景...)

3610 次点击
所在节点    Go 编程语言
34 条回复
realbender
2020-11-23 17:26:50 +08:00
一般可以用来作为网络 io 调用的超时功能,你的需求可能需要在 log 打印中携带一些上下文信息,不一定要用 context
shhch
2020-11-23 17:39:23 +08:00
@realbender 现在是没有使用到 context 的,有没有必要在逻辑函数里加上 context 参数往后传递,方便后续扩展使用
xkeyideal
2020-11-23 17:41:31 +08:00
没人使用 context 做 traceid 的事情,context 主要用途是控制子 goroutine 的存活,你的需求可以采用 WithOption 的方式
eudore
2020-11-23 17:50:11 +08:00
http 的封装下就好,rpc 有全链路日志就是 context 传递
cloverstd
2020-11-23 18:08:33 +08:00
@xkeyideal 我们用了...
rhtututu
2020-11-23 18:10:56 +08:00
@xkeyideal 我们也用了...
yzbythesea
2020-11-23 18:22:44 +08:00
@xkeyideal 我们还是用了...
xkeyideal
2020-11-23 18:34:15 +08:00
@cloverstd 为了明确数据类型,我们不使用 context
shhch
2020-11-23 19:15:34 +08:00
那有没有必要全部加上 context 字段往下传递,作为后续预留使用?
cyrivlclth
2020-11-23 19:38:05 +08:00
@xkeyideal 我们也用了。。。
@shhch 加 context 这个工作量还好吧,前不久刚加过,用 goland 重构功能一下就加好了。。。
Exceptions
2020-11-23 19:40:27 +08:00
@xkeyideal 都用的好吧,第一个参数就是 context,无限传递
ylsc633
2020-11-23 20:02:38 +08:00
我们也用了 context 传 traceid

主要是项目是新写的, 日志和方法第一个参数都是 ctx

好处就是 性能好很多, 弊端就是有点蠢..

如果老项目,可以用代码无侵入的方法,不过性能有点问题..
securityCoding
2020-11-23 20:08:07 +08:00
@xkeyideal 233 ,我们都在用
cloudzhou
2020-11-23 20:12:22 +08:00
@xkeyideal trace id 通过 context 传递,这简直是基本操作阿
PiersSoCool
2020-11-23 20:15:16 +08:00
context 写定时任务,withCancel 在 gracefully shutdown 的时候很好用,监听 <-ctx.Done() 或者 <-ticker.C (继续),再用一个 channel 监听定时任务完成的消息,外层调用 cancel 等待 channel 返回数据就好

with 时间的就不多说了

而且没必要在所有函数加上 Context,几个关键入口就知道谁有问题了吧
GopherDaily
2020-11-23 20:56:33 +08:00
At Google, we require that Go programmers pass a Context parameter as the first argument to every function on the call path between incoming and outgoing requests.

建议是所有的函数的第一个都带上。
作用有几个:
cancel, timeout, trace
lewinlan
2020-11-23 23:31:19 +08:00
涨姿势了……
我以为在所有地方传递 ctx 很傻叉……
看到大家都这样我就放心了:)
lxml
2020-11-23 23:50:26 +08:00
@xkeyideal #3 用了 + 1 用 context 传递 traceId 是主流操作……
tiedan
2020-11-23 23:52:26 +08:00
我们也是 context 传 traceId 哈哈
K4
2020-11-24 00:01:17 +08:00
@shhch 管他三七二十一,接口设计的时候就加上,用不用再说,说不定什么时候就用上了呢?😄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728389

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX