请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于go work sync

老师你好,关于工作区模式我有两个问题
1.工作区是不是可以理解为一个临时的区域,在这个区域内可以正常导入本地的自定义模块,区域内通过go.work文件记录工作区内有哪些包
2. 关于多个模块之间还有可能依赖其他模块,需要使用go work sync,这个命令是会做怎样的操作,会同步哪些信息,不是很明白,能麻烦举个例子吗

正在回答

1回答

第一点的理解是没问题的,工作区本质上就是为解决开发过程中依赖本地尚未发布的module的问题。
课程中的示例是https://gitee.com/phper95/go-interview/tree/master/demo/4-6/workspace

在这个示例中,project是我们的工程代码,pkg1是我们需要引入的包,如果pkg1这个包也在同步开发中,就需要每次改动都需要先同步到远程仓库才能在project工程中。

而且如果我们引入的包还在开发过程中,就需要每次改动pkg1时,先同步到远程仓库再同步最新版本才能使用新提交的改动,会比较麻烦。在go工作区出现之前我们的做法是通过go mod的replace语法来导入本地包,等pkg1功能开发完之后再同步到远程仓库然后去掉replace。

有了go work之后我们就不需要使用replace了。

go work sync是用于同步模块之间的依赖的。比如我们的示例工程中https://gitee.com/phper95/go-interview/blob/master/demo/4-6/workspace/pkg1/pkg1.go中我们引入了beego的logs

package pkg1

import "github.com/astaxie/beego/logs"

var Pkg1 = "pkg1"

func init() {
    logs.Debug("pkg1")
}

https://gitee.com/phper95/go-interview/blob/master/demo/4-6/workspace/pkg1/go.mod

go.mod文件中增加github.com/astaxie/beego/logs这个包的导入

module gitee.com/phper95/pkg1

go 1.20

require github.com/astaxie/beego v1.12.3

当我们在demo/4-6/workspace这个目录下执行go work sync之后,

demo/4-6/workspace/project目录下的go.mod会增加相关依赖:

module project

go 1.20

require github.com/astaxie/beego v1.12.3

require github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect

同时,demo/4-6/workspace/pkg1目录下的go.mod最后一行也会增加beego logs的间接依赖

require github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信