大项目构建太慢?Brad Fitzpatrick 提议引入 -cachelink 降低测试等待时间
大家好我是Tony Bai。在维护大型 Go 单体仓库Monorepo时你是否遇到过这样的场景明明只是修改了测试的运行参数比如-run的正则或者在不同的 CI 节点上运行同一个包的测试却发现go test依然在缓慢地执行“链接Linking”步骤对于代码量巨大的项目链接过程往往是构建链条中最耗时的一环。为了解决这一痛点Go 社区领袖、Tailscale 核心开发者 Brad Fitzpatrick 近日提交了 #77349 提案建议引入-cachelink标志。这一看似微小的改动有望在分布式测试和重复执行场景下显著“挤出”原本被浪费的等待时间。被忽视的瓶颈重复链接的代价Go 的构建缓存GOCACHE机制已经非常高效它能很好地缓存编译阶段的中间产物.a文件。但是当你运行go test时工具链的最后一步——将所有依赖链接成一个可执行的测试二进制文件——通常是“一次性”的。这意味着即使你的代码没有任何变动只要测试指令稍有变化例如多次运行go test但指定不同的测试用例Go 工具链往往会重新触发链接器。# 第一次运行链接 执行 $ go test -run^TestFoo$ ./pkg/ # 第二次运行代码未变依然触发重新链接 执行 $ go test -run^TestBar$ ./pkg/对于依赖项数以千计的大型项目链接过程可能长达数秒甚至更久。在本地频繁调试或 CI 流水线中这些重复的秒数累积起来就是巨大的时间浪费。Brad 的解法-cachelinkBrad Fitzpatrick 的提案非常直接允许将链接器输出的最终测试二进制文件也写入 GOCACHE。通过显式开启-cachelinkgo test的行为将发生变化它会基于构建输入代码、依赖、环境变量等计算哈希。如果发现 GOCACHE 中已经存在已链接好的测试二进制文件。直接跳过链接步骤复用该文件进行测试。这样上述例子中的第二次调用将瞬间启动因为最耗时的构建步骤被完全省去了。为什么不做成默认行为既然能提速为什么不默认开启Brad 在提案讨论中给出了专业的权衡分析空间 vs. 时间。测试二进制文件通常包含完整的符号表和调试信息体积比普通的中间对象文件大得多。如果默认缓存所有测试二进制文件开发者的磁盘空间GOCACHE会迅速膨胀。因此这是一个以空间换时间的策略更适合由开发者根据项目规模手动开启或者在 CI 环境中配置。分布式 CI 的“加速器”该提案真正的杀手级应用场景是 分布式 CI 系统。许多大厂使用GOCACHEPROG来在构建集群间共享缓存。在典型的 CI 流程中测试任务往往会被分片Sharding到数十台机器上并发执行。现状每一台机器拉取源码后都需要各自进行一次链接操作浪费计算资源。引入-cachelink后第一台完成构建的机器会将二进制文件上传到共享缓存。后续几十台机器直接下载该文件并运行全集群的链接成本降为“1”。不仅是go test -c有经验的开发者可能会问“我为什么不直接用go test -c手动编译成二进制文件然后分发运行呢”Brad 指出手动管理二进制文件会绕过 Go 原生的测试结果缓存。而-cachelink的精妙之处在于它既复用了二进制文件又保留了go test完整的缓存与输出管理体验。你不需要编写复杂的脚本来管理这些文件一切依然由go命令自动处理。小结目前该提案已进入活跃评审阶段并有了初步的代码实现。对于深受“构建慢”和“测试慢”困扰的大型项目维护者来说这无疑是一个值得期待的性能优化利器。我们有望在 Go 1.27 或后续版本中见证它的落地。资料链接https://github.com/golang/go/issues/77349聊聊你的构建之苦链接时间正在成为你的“带薪摸鱼”理由吗在你的项目中go test运行一次通常需要多久你为了缩短测试反馈周期还尝试过哪些黑科技比如GOCACHEPROG欢迎在评论区分享你的实战经验或吐槽让我们一起期待-cachelink的落地。点击下面标题干货- 深入GOCACHEPROGGo构建缓存的自定义扩展- Go 标准库竟然也用 vendorstd 和 cmd 模块是如何管理外部依赖的- Go 模块构建与依赖管理我们到底在“折腾”什么- 【Go 测试之道】01 开篇测试的“道”与“术”——从“演员对台词”到我们的“短链接”蓝图- Brad Fitzpatrick 也等不及了sync.Map 的泛型进化与 sync/v2 的诞生之路- 再见丑陋的 container/heapGo 泛型堆 heap/v2 提案解析- Go 泛型落地 4 年后终于要支持泛型方法了 你的Go技能是否也卡在了“熟练”到“精通”的瓶颈期想写出更地道、更健壮的Go代码却总在细节上踩坑渴望提升软件设计能力驾驭复杂Go项目却缺乏章法想打造生产级的Go服务却在工程化实践中屡屡受挫继《Go语言第一课》后我的 《Go语言进阶课》 终于在极客时间与大家见面了我的全新极客时间专栏 《Tony Bai·Go语言进阶课》 就是为这样的你量身打造30讲硬核内容带你夯实语法认知提升设计思维锻造工程实践能力更有实战项目串讲。目标只有一个助你完成从“Go熟练工”到“Go专家”的蜕变 现在就加入让你的Go技能再上一个新台阶

相关新闻

DeepSeek-OCR-2效果展示:工程CAD图纸说明页含尺寸链标注+公差符号+材料牌号识别

DeepSeek-OCR-2效果展示:工程CAD图纸说明页含尺寸链标注+公差符号+材料牌号识别

DeepSeek-OCR-2效果展示:工程CAD图纸说明页含尺寸链标注公差符号材料牌号识别 1. 为什么工程图纸OCR一直很难做? 你有没有试过把一张CAD图纸的说明页扫成PDF,再用普通OCR工具转文字?大概率会得到一串乱码、错位的数字、消失的公…

2026/5/17 2:38:14 阅读更多 →
WuliArt Qwen-Image Turbo开发者案例:API封装为Flask服务供前端调用

WuliArt Qwen-Image Turbo开发者案例:API封装为Flask服务供前端调用

WuliArt Qwen-Image Turbo开发者案例:API封装为Flask服务供前端调用 1. 为什么需要把文生图模型封装成Web服务? 你是不是也遇到过这样的情况:本地跑通了WuliArt Qwen-Image Turbo,生成一张图只要4步、3秒出图,效果惊…

2026/7/4 18:19:24 阅读更多 →
RexUniNLU开源大模型落地:制造业设备故障报告语义解析应用案例

RexUniNLU开源大模型落地:制造业设备故障报告语义解析应用案例

RexUniNLU开源大模型落地:制造业设备故障报告语义解析应用案例 1. 为什么制造业急需一款“能读懂人话”的NLP系统? 你有没有见过这样的设备故障报告? “上午9点23分,3号注塑机B区液压站压力异常波动,油温升至78℃后报…

2026/5/17 2:38:14 阅读更多 →

最新新闻

基于YOLOv3的智能口罩检测系统设计与实现

基于YOLOv3的智能口罩检测系统设计与实现

1. 项目概述与背景在公共卫生事件频发的当下,开发智能化的防疫辅助工具显得尤为重要。这个毕业设计项目基于YOLOv3目标检测算法,实现了一个能够自动检测口罩佩戴情况的系统。系统可以识别三种状态:正确佩戴口罩、未佩戴口罩以及口罩佩戴不规范…

2026/7/4 18:19:17 阅读更多 →
大模型数据准备实战:高信噪比语料构建七步法

大模型数据准备实战:高信噪比语料构建七步法

1. 为什么说“数据准备”才是训练定制大模型时最耗神、也最值钱的环节你有没有过这种体验:花两周时间调参、换架构、折腾分布式训练,最后发现模型在业务场景里答非所问,逻辑混乱,甚至编造事实?我带过三支不同行业的LLM…

2026/7/4 18:13:16 阅读更多 →
遗传算法优化大模型参数:自动化调参实战

遗传算法优化大模型参数:自动化调参实战

1. 项目概述:当遗传算法遇上大模型去年在优化一个客服对话系统时,我花了整整两周手工调整prompt模板和模型参数。直到某天深夜调试时突然想到:为什么不让算法自己寻找最优解?这就是GA(遗传算法)大模型组合的…

2026/7/4 18:11:15 阅读更多 →
机器学习新手必学的5大核心领域进阶地图

机器学习新手必学的5大核心领域进阶地图

1. 这不是一份“排行榜”,而是一张新手进阶地图:为什么初学者必须先搞懂这5个机器学习领域你点开这篇博客,大概率正站在机器学习的入口处——手头可能刚装好Python,跑通了第一个print("Hello, ML!"),但面对“…

2026/7/4 18:11:15 阅读更多 →
AI十年演进路径:从边缘智能到可信AI的工程化落地

AI十年演进路径:从边缘智能到可信AI的工程化落地

1. 这不是预言,而是技术演进路径的推演:我们真正该关注的AI十年图景你点开这篇文章,大概率不是为了听一句“AI会改变世界”——这句话从2012年AlexNet横空出世那天起,就被重复了上万遍。我做AI工程落地和系统架构设计整整11年&…

2026/7/4 18:07:14 阅读更多 →
Spring Boot + MyBatis + Vue 全栈毕设实战:从零到部署的完整项目开发指南

Spring Boot + MyBatis + Vue 全栈毕设实战:从零到部署的完整项目开发指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 计算机专业的学生在完成毕业设计或课程设计时,常常面临一个核心矛盾:既要理解项目背后的技术原理&#xff0…

2026/7/4 18:07:14 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻