如题,之前的项目中没有使用 context,高并发的场景下,日志都难以定位问题,于是准备在所有逻辑函数中加上 context (工作量有点大),并为每次请求带上 id 标识;
但是除此之外就没有其他作用了,就有点怀疑是否有必要;
有没有大佬介绍下实际中的其他使用场景和方式?( With 系列目前也没有发现有什么使用场景...)

如题,之前的项目中没有使用 context,高并发的场景下,日志都难以定位问题,于是准备在所有逻辑函数中加上 context (工作量有点大),并为每次请求带上 id 标识;
但是除此之外就没有其他作用了,就有点怀疑是否有必要;
有没有大佬介绍下实际中的其他使用场景和方式?( With 系列目前也没有发现有什么使用场景...)
1 realbender Nov 23, 2020 一般可以用来作为网络 io 调用的超时功能,你的需求可能需要在 log 打印中携带一些上下文信息,不一定要用 context |
2 shhch OP @realbender 现在是没有使用到 context 的,有没有必要在逻辑函数里加上 context 参数往后传递,方便后续扩展使用 |
3 xkeyideal Nov 23, 2020 没人使用 context 做 traceid 的事情,context 主要用途是控制子 goroutine 的存活,你的需求可以采用 WithOption 的方式 |
4 eudore Nov 23, 2020 http 的封装下就好,rpc 有全链路日志就是 context 传递 |
7 yzbythesea Nov 23, 2020 @xkeyideal 我们还是用了... |
9 shhch OP 那有没有必要全部加上 context 字段往下传递,作为后续预留使用? |
10 cyrivlclth Nov 23, 2020 |
11 Exceptions Nov 23, 2020 @xkeyideal 都用的好吧,第一个参数就是 context,无限传递 |
12 ylsc633 Nov 23, 2020 我们也用了 context 传 traceid 主要是项目是新写的, 日志和方法第一个参数都是 ctx 好处就是 性能好很多, 弊端就是有点蠢.. 如果老项目,可以用代码无侵入的方法,不过性能有点问题.. |
13 securityCoding Nov 23, 2020 @xkeyideal 233 ,我们都在用 |
15 PiersSoCool Nov 23, 2020 context 写定时任务,withCancel 在 gracefully shutdown 的时候很好用,监听 <-ctx.Done() 或者 <-ticker.C (继续),再用一个 channel 监听定时任务完成的消息,外层调用 cancel 等待 channel 返回数据就好 with 时间的就不多说了 而且没必要在所有函数加上 Context,几个关键入口就知道谁有问题了吧 |
16 GopherDaily Nov 23, 2020 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 |
17 lewinlan Nov 23, 2020 via Android 涨姿势了…… 我以为在所有地方传递 ctx 很傻叉…… 看到大家都这样我就放心了:) |
19 tiedan Nov 23, 2020 我们也是context 传 traceId 哈哈 |
21 unixeno Nov 24, 2020 via Android trace,管理 go routine (控制超时什么的) 应该主要就这两个用了,其实就是个上下文环境了 |
22 dingyaguang117 Nov 24, 2020 via iPhone 哈哈 tornado 单线程我们使用 contextvar Flask 使用 threadlocal Go 随时起 性能好 不过 ctx 用起来麻烦了点 |
26 tairan2006 Nov 24, 2020 cxt 的设计其实非常简单粗暴…这也是不如 java 的地方,很多时候没法对代码无侵入。 |
27 snowwalf Nov 24, 2020 我们也是 context 传 tracerid,接入 http server/client,实现多服务全链路串联;另外 context 里带上 stack,实现模块调用堆栈打点 |
28 mooyo Nov 24, 2020 via iPhone 我们也用了,不太理解不用 ctx 要怎么做链路的追踪 |
29 TypeErrorNone Nov 24, 2020 主要用来传参 |
31 cyrivlclth Nov 26, 2020 |
32 tairan2006 Nov 26, 2020 @cyrivlclth 侵入性太强了,以前的 code base 大的话根本改不动 |
34 cyrivlclth Dec 21, 2020 @tairan2006 我是觉得业务代码就别提什么侵入性了。 |