采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,关于工作区模式我有两个问题 1.工作区是不是可以理解为一个临时的区域,在这个区域内可以正常导入本地的自定义模块,区域内通过go.work文件记录工作区内有哪些包 2. 关于多个模块之间还有可能依赖其他模块,需要使用go work sync,这个命令是会做怎样的操作,会同步哪些信息,不是很明白,能麻烦举个例子吗
第一点的理解是没问题的,工作区本质上就是为解决开发过程中依赖本地尚未发布的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
感谢老师的回答,我懂了
登录后可查看更多问答,登录/注册
GO工程师面试与技能提升专题课程
192 6
113 5
287 5
162 4
329 3