说一说go mod

写在前面,我们要切换到go mod吗

go mod是官方力推的go模块依赖管理的工具,有官方的背书,肯定是要用的。go1.13已经默认支持了,所以迟早要切到go mod, 势不可挡。

go mod什么

go mod能管理的依赖包的版本,能保证在不同地方构建,获得的依赖模块是一致的。

没有go mod之前如何管理包依赖

没有go mod之前,有go deps, vendor等方法来解决。

go mod如何工作

  • go 1.11通过设置环境变量GO111MODULE来决定是否启用
export GO111MODULE=off  #关闭go mod
export GO111MODULE=on   # 开启mod
export GO111MODULE=auto # GOPATH/src不启用,但是还要看当前目录或者上级目录是否存在go.mod,go.sum,如果存在,则启用go mod

这里面有个坑,就是设置为auto的时候并且在GOPATH/src下,如果该目录或者父目录存在go.mod, go.sum文件,则go mod也是启用的

  • go1.13已经默认开启

切换到go mod可能遇到的问题

  • go mod download非常慢
export GOPROXY=https://mirrors.aliyun.com/goproxy/ #设置拉取的代理 
export GOPROXY=file://本地路径  # 也可以从本地加载
  • go mod下载的包不对

可下面的命令下载指定的版本

如果发现编译不过,可以通过下面命令列出指定mod的版本,然后go get拉指定版本号的包
go list -m -versions rsc.io/sampler
go get rsc.io/sampler@v1.3.1

1.13可以彻底不要GOPATH了

  • go mod 会贯穿go tool工具链,这句话什么意思呢,意思是go test, go vet, go build等工具都会先检查依赖。go mod会自动工作。如果你依赖没有下载好,则会一直卡住。

* go mod init # 初始化当前目录为模块根目录,生成go.mod, go.sum文件
* go mod download # 下载依赖包
* go  mod tidy #整理检查依赖,如果缺失包会下载或者引用的不需要的包会删除
* go mod vendor #复制依赖到vendor目录下面
* go mod 可看完整所有的命令

go mod虽好,但是费开发者的电脑磁盘,go mod拉下的包都会放 当前目录的pkg/mod目录下面, 意味着不同项目引用相同的包会重复下载,不像java的maven本地一个集中的目录,不重复下载。

更详细的说明可以看官方blog关于go mod的说明
https://blog.golang.org/using-go-modules

 

本文转载自:https://studygolang.com/articles/24119?fr=sidebar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值