跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang context 的相关使用
未分類
25 11 月 2020

golang context 的相关使用

golang context 的相关使用

資深大佬 : shhch 3

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

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

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

大佬有話說 (30)

  • 資深大佬 : realbender

    一般可以用来作为网络 io 调用的超时功能,你的需求可能需要在 log 打印中携带一些上下文信息,不一定要用 context

  • 主 資深大佬 : shhch

    @realbender 现在是没有使用到 context 的,有没有必要在逻辑函数里加上 context 参数往后传递,方便后续扩展使用

  • 資深大佬 : xkeyideal

    没人使用 context 做 traceid 的事情,context 主要用途是控制子 goroutine 的存活,你的需求可以采用 WithOption 的方式

  • 資深大佬 : eudore

    http 的封装下就好,rpc 有全链路日志就是 context 传递

  • 資深大佬 : cloverstd

    @xkeyideal 我们用了…

  • 資深大佬 : rhtututu

    @xkeyideal 我们也用了…

  • 資深大佬 : yzbythesea

    @xkeyideal 我们还是用了…

  • 資深大佬 : xkeyideal

    @cloverstd 为了明确数据类型,我们不使用 context

  • 主 資深大佬 : shhch

    那有没有必要全部加上 context 字段往下传递,作为后续预留使用?

  • 資深大佬 : cyrivlclth

    @xkeyideal 我们也用了。。。
    @shhch 加 context 这个工作量还好吧,前不久刚加过,用 goland 重构功能一下就加好了。。。

  • 資深大佬 : Exceptions

    @xkeyideal 都用的好吧,第一个参数就是 context,无限传递

  • 資深大佬 : ylsc633

    我们也用了 context 传 traceid

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

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

    如果老项目,可以用代码无侵入的方法,不过性能有点问题..

  • 資深大佬 : securityCoding

    @xkeyideal 233 ,我们都在用

  • 資深大佬 : cloudzhou

    @xkeyideal trace id 通过 context 传递,这简直是基本操作阿

  • 資深大佬 : PiersSoCool

    context 写定时任务,withCancel 在 gracefully shutdown 的时候很好用,监听 <-ctx.Done() 或者 <-ticker.C (继续),再用一个 channel 监听定时任务完成的消息,外层调用 cancel 等待 channel 返回数据就好

    with 时间的就不多说了

    而且没必要在所有函数加上 Context,几个关键入口就知道谁有问题了吧

  • 資深大佬 : GopherDaily

    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

    涨姿势了……
    我以为在所有地方传递 ctx 很傻叉……
    看到大家都这样我就放心了:)

  • 資深大佬 : lxml

    @xkeyideal #3 用了 + 1 用 context 传递 traceId 是主流操作……

  • 資深大佬 : tiedan

    我们也是 context 传 traceId 哈哈

  • 資深大佬 : K4

    @shhch 管他三七二十一,接口设计的时候就加上,用不用再说,说不定什么时候就用上了呢?

  • 資深大佬 : unixeno

    trace,管理 go routine (控制超时什么的)
    应该主要就这两个用了,其实就是个上下文环境了

  • 資深大佬 : dingyaguang117

    哈哈 tornado 单线程我们使用 contextvar
    Flask 使用 threadlocal

    Go 随时起 性能好 不过 ctx 用起来麻烦了点

  • 資深大佬 : v2Geeker

    @xkeyideal 我们也用了。context 非常适合。

  • 資深大佬 : yuyoung

    @xkeyideal 额,我好像是这么用的,这里有什么设计问题吗?

  • 主 資深大佬 : shhch

    @K4 没毛病,全加上,用不用再说_(:з」∠)_

  • 資深大佬 : tairan2006

    cxt 的设计其实非常简单粗暴…这也是不如 java 的地方,很多时候没法对代码无侵入。

  • 資深大佬 : snowwalf

    我们也是 context 传 tracerid,接入 http server/client,实现多服务全链路串联;另外 context 里带上 stack,实现模块调用堆栈打点

  • 資深大佬 : mooyo

    我们也用了,不太理解不用 ctx 要怎么做链路的追踪

  • 資深大佬 : TypeErrorNone

    主要用来传参

  • 主 資深大佬 : shhch

    @mooyo +1
    @snowwalf 大佬,堆栈打点具体是怎么做的啊

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具