IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

实现 go 的 goroutine 本地存储又一种方式

神仙的仙居 2021-05-26 22:41:36 累计浏览 1,879 次
本机暂存

go 本身没有对外提供 goroutine 本地存储,而现实中,又经常需要在上下文中传递一些数据。使用 context 也是一种方式,但是要求在所有需要的地方都要传递,还是非常麻烦,而且有侵入性。

偶然发现 go 已经提供了一个用于 profile 的 pprof label,可以在 goroutine 中携带一些数据。不过这个东西既然是用于 pprof 的,随意往里塞太多东西显然也不适合,还会对 pprof 产生干扰。所以,想办法只用其中一个 label,用一些黑科技把一个 map 放了进去,将影响降到最小。同时,pprof 包中已经有一些基于 context 访问处理 label 的逻辑,所以还要做一些兼容处理,避免被其覆盖。

写了个简单的库:https://github.com/xiezhenye/gls

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Go Reflect 性能 (累计阅读 14,155)
  2. 面向“接口”编程和面向“实现”编程 (累计阅读 13,910)
  3. 一种基于长连接的社交游戏服务器程序构架 (累计阅读 7,505)
  4. 从Go看,语言设计(一) (累计阅读 6,167)
  5. go-kit 入门(一) (累计阅读 4,769)
  6. 分布式存储Seaweedfs源码分析 (累计阅读 4,753)
  7. 为什么我们要使用Go语言以及如何使用它的 (累计阅读 4,582)
  8. Go 语言初步 (累计阅读 4,500)
  9. 程序员的“横向发展” (累计阅读 4,143)
  10. ZeroMQ 的模式 (累计阅读 4,059)