golang context 的相关使用

2020 年 11 月 23 日
 shhch

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

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

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

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

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

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

https://study.congcong.us/t/728389

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

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

© 2021 V2EX