开源项目初体验-GOC
18 Aug 2026
• 2 min read
记录我贡献的第一个开源项目
背景
2022/23年当时组内后端均使用golang(1.14)编写,早期Golang只提供了unit test的覆盖率工具。而代码覆盖率对于QA来说是非常重要的参考数据,对提升QA工作效率和测试质量有非常关键的作用。经过一系列调研,了解到了开源项目goc可以实现runtime下的代码覆盖率收集,遂有了后续工作。而Golang官方后续也在 1.20 版本支持了集成测试获取代码覆盖率的功能。
GOC原理
这里不重点阐述 GOC 的运行原理和功能,总结来说它提供了两个核心功能:
- 通过插桩实现Golang运行时的代码覆盖率统计
- ClientServer架构的多服务管理
应用
确定好工具,我们便将goc整合到测试环境的CICD中,实现对于开发团队无感知的接入。在Jenkins中实现覆盖率的可视化,而且打通了整个端到端的测试流水线:测试分支接入goc>部署测试环境>执行自动化测试>收集覆盖率,使用下来反响很好。QA可以根据覆盖率进行更有针对性的补充测试,提升测试质量和效率。
问题发现与修复
经过团队的推广,部署的服务越来越多,goc server时不时会发生崩溃,导致客户端丢失数据,考虑到影响较大,最终排查定位到是goc的一个并行 问题 ,本地修复验证成功,遂上报github一起修复。另外还发现组内某些服务和goc项目的函数有重复命名的现象导致编译报错,就还提交了针对goc新函数增加前缀的 小改动 。 在此之前我从未参与过github开源项目的贡献,倒不是因为不想而是认为开源项目一定对贡献者的代码水平和技术有很高要求,而我这个小虾米何德何能。可提交完Issue并和作者的沟通后,发现大佬们还是很乐意跟我讨论问题和指出改进的点,是我自己把它想得太遥远了。
回顾
- 产品不是一蹴而就的,每个开源贡献者都可以发掘需求。即便是编程语言,功能也要慢慢迭代。
- 开源项目并非遥不可及,勇于尝试保持真诚很重要;参与可以先从修bug入手。
- 其实我对github社区早有耳闻而且很乐于做一个社区贡献者,觉得是很酷的一件事情,但要真参与进去真不是光想就行;要真真实实地用过了这个工具才能找到里面的问题和痛点,再对其进行修改、修复。
总而言之,GOC开源项目的经验对我来说很宝贵,让我对社区实际的运行有了更多的了解。