golang context 的相关使用

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

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

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

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

3419 次点击
所在节点    Go 编程语言
34 条回复
unixeno
2020-11-24 01:07:37 +08:00
trace,管理 go routine (控制超时什么的)
应该主要就这两个用了,其实就是个上下文环境了
dingyaguang117
2020-11-24 09:07:20 +08:00
哈哈 tornado 单线程我们使用 contextvar
Flask 使用 threadlocal

Go 随时起 性能好 不过 ctx 用起来麻烦了点
v2Geeker
2020-11-24 09:19:19 +08:00
@xkeyideal 我们也用了。context 非常适合。
yuyoung
2020-11-24 09:29:23 +08:00
@xkeyideal 额,我好像是这么用的,这里有什么设计问题吗?
shhch
2020-11-24 09:39:45 +08:00
@K4 没毛病,全加上,用不用再说_(:з」∠)_
tairan2006
2020-11-24 10:37:15 +08:00
cxt 的设计其实非常简单粗暴…这也是不如 java 的地方,很多时候没法对代码无侵入。
snowwalf
2020-11-24 11:11:52 +08:00
我们也是 context 传 tracerid,接入 http server/client,实现多服务全链路串联;另外 context 里带上 stack,实现模块调用堆栈打点
mooyo
2020-11-24 12:35:53 +08:00
我们也用了,不太理解不用 ctx 要怎么做链路的追踪
TypeErrorNone
2020-11-24 14:18:31 +08:00
主要用来传参
shhch
2020-11-24 14:30:41 +08:00
@mooyo +1
@snowwalf 大佬,堆栈打点具体是怎么做的啊
cyrivlclth
2020-11-26 09:29:39 +08:00
@lewinlan
@tairan2006 个人认为 go 的话显式比隐式好...
tairan2006
2020-11-26 19:33:48 +08:00
@cyrivlclth 侵入性太强了,以前的 code base 大的话根本改不动
snowwalf
2020-11-29 17:46:33 +08:00
@shhch 就是 context.WithValue 带个自定义的调用栈信息,先进先出,实现调用函数链的追踪
cyrivlclth
2020-12-21 20:46:00 +08:00
@tairan2006 我是觉得业务代码就别提什么侵入性了。

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

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

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

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

© 2021 V2EX