请点击上方蓝字TonyBai订阅公众号!
大家好,我是Tony Bai。
自 2016 年底将 Go 语言引入其技术栈以来,成立于1850年的美国运通(American Express)公司已在多个核心平台验证了其在性能、效率和可伸缩性方面的承诺。Go官方也在主页上将运通公司对Go的使用作为典型案例:
近日,其工程团队发布了一篇回顾性文章,系统性地总结了近10年 Go 语言企业级应用的七大关键经验。本文将和大家一起解读这些来自金融科技巨头的宝贵洞察,涵盖从 Go Modules 的演进、并发模型的挑战,到构建“黄金框架”以及培育千人内部社区的最佳实践。
Go 在美国运通的今天:七大关键洞察
从最初的选择到如今成为性能关键平台的核心语言,美国运通的 Go 语言之旅并非一帆风顺。他们分享的七个关键学习点,为所有正在或计划在企业环境中使用 Go 的团队提供了极具价值的参考。
1. 依赖管理:Go Modules 的胜利
在 Go Modules 出现之前,企业内部防火墙和代理网络下的依赖管理是一个巨大的痛点。美国运通坦言,早期的依赖管理机制在企业环境中“极具挑战性”。Go Modules 的引入彻底改变了这一局面,使得版本控制和依赖管理变得“远为直接”,并促进了主流企业级开发工具对 Go 的广泛支持。
2. 并发模型:易于上手,难于精通
Go 标志性的 goroutine
是其核心吸引力之一,但在生产环境中正确使用它并非没有“令人头疼”的问题。团队发现,虽然创建 goroutine 非常简单,但清理和跨 goroutine 的协调是最初面临的主要挑战。
为了应对这些挑战,他们沉淀出了一套强大的并发模式:
核心工具:广泛拥抱
sync
和context
标准库包。泄漏防治:强制使用
defer
语句来确保资源清理,避免 goroutine 泄漏。早期检测:在所有测试中默认开启数据竞争检测器 (
-race
),将并发问题扼杀在摇篮中。
3. 培训与规范:打造惯用的 Go 文化
尽管 Go 语言以简单著称,但让整个团队写出“惯用(Idiomatic)”的 Go 代码仍需投入。美国运通为此建立了内部培训项目和文档体系,确保工程师从第一天起就能遵循最佳实践。
4. “黄金框架”:标准化的“铺就之路”
随着 Go 的采用规模扩大,标准化的需求日益凸显。为了统一和优化服务构建,美国运通创建了一个内部的“黄金框架”(Golden Framework),也被称为“铺就之路”(Paved Road)。
这个框架为开发者内置了所有非功能性需求的支持,包括:
可观测性(Observability)
异步健康检查
优雅停机(Graceful Shutdown)
安全规范
5. 内部工具包:封装与定制
“黄金框架”建立在一个名为“越野工具包”(Off-Roading toolkit)的基础之上。这是一个内部 Go 包的集合,其核心作用是封装和定制开源库,以适应美国运通独特的内部基础设施。
一个绝佳的例子是他们的日志包。它封装了标准库的结构化日志 slog
,为其增加了对内部日志格式的支持,并实现了带有缓冲和截断策略的异步日志功能。这既利用了社区的优秀成果,又满足了企业的特殊需求。
6. 原生工具链:性能优化的基石
美国运通强调,Go 的原生工具链是其能够持续交付高性能服务的关键。
性能剖析:
pprof
和基准测试(go test -bench
)极大地简化了性能分析过程。运行时优势:低延迟的 GC 停顿和高效的 goroutine 调度,完美契合了其低延迟、高规模的支付平台需求。
资源效率:Go 高效的资源利用率帮助他们显著降低了基础设施的开销。
7. 社区建设:创新的驱动力
最宝贵的成果之一,是在公司内部形成了一个强大的 Go 社区。
规模:近 1,000 名工程师在内部的 Go 频道中积极协作。
活动:通过每月的 meetup、内部会议来分享知识。
共同资产:“黄金框架”和工具包的持续演进,本身就是社区协作的产物。
这种由同行驱动的文化,被认为是提炼最佳实践和推动创新的核心要素。
小结
美国运通的经验再次证明,Go 语言不仅仅是一门“小而美”的语言,它完全有能力在要求严苛的金融科技领域作为核心技术栈,支撑起大规模、高性能的关键业务。
他们的故事为我们揭示了一个成功的技术采纳路径:从解决基础的依赖管理问题,到攻克并发编程的深水区;从建立培训体系,到打造标准化的“黄金框架”;最终通过培育一个充满活力的内部社区,实现技术的自我演进和持续创新。
对于所有 Go 开发者和技术领导者而言,这七大经验教训不仅是关于如何“使用”Go,更是关于如何在一个大型组织中,围绕一门语言构建一个可持续发展的、高效的工程文化。
资料链接:https://www.americanexpress.io/go-at-american-express-today/
如果本文对你有所帮助,请帮忙点赞、推荐和转发!
点击下面标题,阅读更多干货!
- 解构Go并发之核,与Dmitry Vyukov共探Go调度艺术
- 【Go并发调度艺术】01 轻量与并发的初心:Goroutine的设计目标与早期M:N模型的探索
🔥 你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?
想写出更地道、更健壮的Go代码,却总在细节上踩坑?
渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
想打造生产级的Go服务,却在工程化实践中屡屡受挫?
继《Go语言第一课》后,我的 《Go语言进阶课》 终于在极客时间与大家见面了!
我的全新极客时间专栏 《Tony Bai·Go语言进阶课》 就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。
目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!