Golang Workspace
介绍
痛点
如果我们同时在开发 module A 和 B, A 依赖于 B 的某个接口,在本地开发中,我们需要修改 go.mod 增加 replace 来直接引用 module B,而且需要在提交代码之前,记得删除 replace 指令才行。GOPATH Mode 中不存在这个问题。
Go 1.18 中 引入了 workspace 的开发模式,它可以方便开发者在不修改 go.mod 文件的情况下,同时对多个 module 进行开发和测试。
原理
随着 Go workspace 的引入,我们可以使用 go.work 文件来管理我们所有的依赖,go.work 文件使用 use 和 replace 指令来覆盖 go.mod 文件中的对用内容,所以我们就不在需要每次修改 go.mod 文件了。
开始使用
要求: Go version >= 1.18 下载:https://dl.golang.com.cn
2.1 创建 worksapce
我的项目目录结构如下:
A-test 依赖 B-lib-test
total 0
drwxr-xr-x 5 xxx staff 160 May 22 19:03 .
drwxr-xr-x 9 xxx staff 288 May 22 18:50 ..
drwxr-xr-x 6 xxx staff 192 May 22 19:04 A-test
drwxr-xr-x 6 xxx staff 192 May 22 18:50 B-lib-test
使用 go work init
在要修改的 module 的共同父目录中创建 go.work 文件
go work init
drwxr-xr-x 6 xxx staff 192 May 22 19:10 .
drwxr-xr-x 9 xxx staff 288 May 22 18:50 ..
-rw-r--r-- 1 xxx staff 8 May 22 19:10 go.work
drwxr-xr-x 6 xxx staff 192 May 22 19:04 A-test
drwxr-xr-x 6 xxx staff 192 May 22 18:50 B-lib-test
2.2 添加要开发的模块到 worksapce
使用 go work use
添加要开发的模块到 go.work 文件
go work use ./A-test
go work use ./B-lib-test
可以同时调整多个 module 并且无需修改 go.mod 了
IDE 集成情况
vs code 和 goland 已经支持