go 使用多模块工作区,让开发者可同时处理多个模块的…


一、使用go work

go 使用多模块工作区,让开发者可同时处理多个模块的开发。在Go 1.17之前,只能使用go.mod replace指令实现,虽然支持同时进行多个模块的开发,但使用它可能是很痛苦的。每次当你想要提交代码时,都不得不删除掉 go.mod中的replace才能使模块稳定的发布。

go 1.18后,官方提供了多模块工作区功能,即go work

1. 使用条件

  • 需要go 1.18或更高版本
# 查看 go 版本
$ go version
go version go1.18 darwin/amd64

2.go work支持命令

  • 通常情况下,建议不要提交go.work文件到git 上,它主要用于本地代码开发
  • 生成go.work文件:推荐在$GOPATH路径下执行
    • 注意:若你的开发空间不在$GOPATH下,则在你的实际workspace根目录下执行初始化

init工作区文件:

# 查看我的 GOPATH
$ go env | grep GOPATH
GOPATH="/Users/xxx/go"

# 查看我的某个 workspace 
go $ pwd
/Users/xxx/gitHub/lian/go

go $ go work init # 初始化,生成 go.work工作区文件
go $ tree
workspace文件初始化结构

【黄色】标识go-gin-web是在go这个当前workspace下的一个项目,同级的还有另外一个项目go-grammar

【红色】标识内的go.workgo.work.sum是我们init后,写入的初始化工作区文件。二者在workspace根目录,与go-gin-web同级。

  • 添加新的模块到工作区:go work use
$ go work use ./example # 添加一个模块到工作区
$ go work use ./example ./example1 # 添加多个模块到工作区
$ go work use -r ./example # 递归 ./example 目录到当前工作区

# 删除命令
$ go work edit -dropuse=./example

# 查看当前工作区文件路径,排查工作区文件是否设置正确
$ go env GOWORK
/Users/xxx/gitHub/lian/go/go.work

3.go.work文件结构

  • go.mod文件结构类似,支持Go版本号、指定工作区和需要替换的仓库
  • 文件结构示例:
go.work文件结构示例

参考


最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

微信公众号

本文版权归原作者曜灵所有!未经允许,严禁转载!对非法转载者, 原作者保留采用法律手段追究的权利!
若需转载,请联系微信公众号:连先生有猫病,可获取作者联系方式!