为什么会遇到本地多模块联调

当你维护多个 Go 项目,或者把公共库单独拆出来时,经常会遇到这种情况:

  • A 模块依赖 B 模块
  • 你正在本地同时修改 A 和 B
  • 你不想每改一次 B 都先发一个远程版本

这时就会自然遇到 replacego work

replace 适合什么场景

replace 更适合当前项目临时替换依赖来源。

1replace example.com/lib => ../lib

这样当前项目在解析依赖时,就会直接使用本地路径,而不是去拉远端版本。

go work 解决什么问题

go work 更像 workspace 级别的协作工具。它能把多个模块放到同一个工作区里统一联调,而不需要在每个模块里都写一遍 replace

1go work init ./app ./lib

两者怎么选

我的经验是:

  • 临时验证一个依赖替换时,用 replace
  • 长时间维护多个本地模块并行开发时,用 go work

我的复盘

replace 更像单项目级别的应急工具,go work 更像多模块开发的长期方案。把这两者分清后,本地联调就会顺很多。