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