工作区模式
1 )概述
- 导入内部开发包,之前有两种处理方式
- 一种是使用Go Modules的
replace
语句,将远程包替换成本地包的路径- 这种注意,在开发完成之后还需将replace去掉再提交到仓库
- 如果有多个这种内部包,这种操作还是很麻烦的
- 另一种方式是将包上传到git平台,再使用 Go Modules 来处理依赖问题
- 这种也是一样,只有提交到远程仓库,才能调试,不适合开发环境
- 一种是使用Go Modules的
- 现在有一种,不需要使用上述方式来简便调试内部私有包
- 这种是 工作区模式,即 (go 1.8 版本之后的模式)
- 这种跟 Go Path 时代的 workspace 不同的是
- 它可以支持本地多个 Go Modules 的开发
2 )演示
目录结构如下
-
workspace
- pkg/
- go.mod
- pkg.go
- project/
- go.mod
- main.go
- pkg/
-
比如,这里 pkg 包的go.mod中声明该包属于 gitlab 平台的,例如:
module gitlab.com/xxx/pkg
-
实际上,并没有在我们的gitlab平台上创建这样一个仓库,这个时候,我们拉取这个包,是拉取不到的
- $
go mod tidy
是找不到这样一个包的
- $
-
现在不通过上传这个包的情况下,在project项目中,使用这个包内的属性或方法
-
在 workspace 目录下初始化一个工作区 $
go work init pkg project
- 如果有多个工程或包的目录都可以在上面命令中继续添加
-
之后,在当前目录下,为我们生成一个 go.work 的文件, 内容如下
go 1.20use(./gkg1./project )
-
使用这种方式,不用关心私有包是否上传到远程仓库,即可互相调用
-
在开发私有包的时候,就可以使用这个 workspace 目录在本地开发完之后
-
将我们这些包及工程代码分别提交到远程仓库
-
在实际项目中,多个模块之间,可能还存在其他的依赖
-
可以在 gowork 所在的目录,也就是我们这个 workspace目录
-
执行一个 $
go work sync
这个命令就可以同步工作区下面的工程依赖