Go module包及依赖管理

版本命名定范

版本号格式为v<major>.<minor>.<patch>,如v1.2.3。当有不兼容的改变时,需要增加major版本号,如v2.1.0

Go module规定,如果major版本号大于1,则major版本号需要显式地标记在module名字中,如module github.com/my/mod/v2。这样做的好处是Go module 会把module github.com/my/mod/v2module github.com/my/mod视做两个module,他们甚至可以被同时引用

go get

go get借助代码管理工具(例如:git,svn,hg等等)从远程拉取代码和依赖包,并且自动完成编译和安装。

可以这么理解,go get获取代码到本地的时候编译器会通览一遍代码,得出需要哪些依赖包。如果本地没有这些依赖包,会从远程拉取这些依赖包到本地。然后完成编译。

go get 命令目前支持的有BitBucket、GitHub、Google Code 和 Launchpad。 go 工具会自动根据不同的域名调用不同的代码管理工具。

-d 只下载不安装
-f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
-fix 在获取源码之后先运行fix,然后再去做其他的事情
-t 同时也下载需要为运行测试所需要的包
-u 强制使用网络去更新包和它的依赖包,即使主包没有更新,也会更新依赖包
-v 显示执行的命令

go get和go install区别

go getgo install 都是 Go 语言中用于包管理的命令,但它们的作用不太一样。

go get命令用于下载并安装指定的包及其依赖项,然后将它们放在 $GOPATH目录下的对应位置,以便其他项目可以引用它们。如果未指定版本,则会安装最新版本。如果包已经存在,则会更新它到最新版本。如果包安装失败,可能会导致其他程序的问题。

go install命令用于编译并安装指定的包。它会先执行 go build 命令来编译包,然后将生成的可执行文件放在 $GOBIN 目录下,以便直接执行该文件。如果包已经存在,则会将其更新到最新版本。如果编译失败,则不会安装该包

因此,go get 的主要作用是下载并安装包及其依赖项,而go install的主要作用是编译并安装包。一般来说,在安装一个新包时,应该使用 go get 命令,而在编译一个包时,应该使用go install命令

go mod命令

命令作用
go mod init初始化当前文件夹,创建 go.mod 文件
go mod tidy增加缺少的包,删除无用的包
go mod download下载依赖包到本地(默认为 GOPATH/pkg/mod 目录)
go mod edit编辑 go.mod 文件
go mod graph打印模块依赖图
go mod vendor将依赖复制到 vendor 目录下
go mod verify校验依赖
go mod why解释为什么需要依赖

snapshot依赖问题

java开发过程中,我们经常需要snapshot版本来进行联调。对应go开发,可以使用go get xxxx@分支名的方式,达到不用修改版本号的目的。

联调完成后,再次执行go get xxx@latest

Mod Cache 路径

下载的模块内容会缓存在 $GOPATH/pkg/mod 目录中:

img

使用以下命令可清空缓存:

go clean --modcache

关注公众号:关大仙的学习笔记

后续高质量文章都会发布到这个公众号上, 还有面试共享群可以添加

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值