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 已经支持

ide