
大家好,我是Tony Bai。
欢迎来到我们的专栏 《Go 模块构建与依赖管理: 从入门到精通》的第七讲。
在上一讲中,我们学习了如何使用 replace 这把“手术刀”来处理依赖关系中的“疑难杂症”。我们特别提到了它的第一个核心用途——本地开发与调试。replace 允许我们将一个模块依赖重定向到本地文件系统,这在需要同时修改和联调多个模块时,似乎是唯一的选择。
但你是否觉得,这个“唯一的选择”,用起来却总是提心吊胆?
你小心翼翼地在 go.mod 文件里加上 replace example.com/foo => ../foo,调试完毕后,又得万分谨慎地将它删掉。你团队的 Git 提交历史上,一定充满了类似这样的 commit message:“fix: remove replace for local debug”。
如果有一天,你忘记删了呢?CI/CD 流水线会因为找不到你本地的路径而崩溃。如果团队成员的本地目录结构和你不一样呢?那行 replace 对他来说就是一句废话。当项目复杂到需要同时联调十几个内部模块时,维护这些临时的 replace 指令,简直就是一场噩梦。
这个由临时 replace 指令构成的、脆弱又混乱的开发环境,我称之为“replace 泥潭”。
Go 团队显然也无法忍受这个泥潭。于是在 Go 1.18 版本,他们为我们带来了终极的解决方案,一个专门为多模块本地开发而生的“神器”——go.work。
今天,我们将亲身体验一下深陷“replace 泥潭”的痛苦,然后,我将带你使用 go.work,一步步地爬出泥潭,走向一片坚实、清爽的开发新大陆。


被折叠的 条评论
为什么被折叠?



