本文摘自php中文网,作者藏色散人,侵删。
下面由golang教程栏目给大家介绍golang 依赖管理之 mod ,希望对需要的朋友有所帮助!golang 依赖管理之 mod
go 很早就考虑了依赖管理的问题,内置 go get
命令,可以直接获取对应的依赖,非常方便,但是有一个巨大的缺陷,没有版本的维护和管理,而版本不一致可能会导致各种兼容性问题,因此出现了很多第三方依赖管理工具,dep
和 glide
就是其中的佼佼者,到了 go 1.11 官方终于推出了自己的依赖管理工具 mod
,并内置在 go 版本中,go mod
使用简单,功能强大,并且能自动兼容大多数之前的第三方工具,大量优秀的开源库都已经切换到了 go mod
,大有一统江湖之势
GO111MODULE
一个最大的变化是 golang 的项目终于不再依赖 $GOPATH
目录了,之前的项目由于 import
机制问题,所有项目都位于 $GOPATH/src
目录下,虽然也没有太大的问题,但总是让人感觉很怪,go 1.11 终于调整了这个问题,将代码从 $GOPATH
中迁出了,为了兼容之前研发模式,也仍然支持放到 $GOPATH
下,通过 GO111MODULE
环境变量控制
GO111MODULE=off
: 关闭 mod,查找vendor
目录和$GOPATH
路径下的依赖GO111MODULE=on
: 开启 mod, 仅根据go.mod
下载和查找依赖GO111MODULE=auto
: 默认值,在非$GOPATH
路径并且包含go.mod
的项目中才开启 mod
主要命令
1 2 3 4 |
|
- 对于一个新的 go 项目,只需要新建项目的时候执行一下
go mod init
- 之后每次库更新,只需要先在代码中 import 对应库,然后执行
go mod tidy
即可(也可用go mod download
手动下载)
库版本更换
手动修改 go.mod
文件中的 require 字段,重新执行 go mod tidy
即可
1 2 3 |
|
golang 的版本使用以 v
开头的三位版本号,其中第一位表示有重大本本的更新,当发布一个 v2+
版本的库时,module my-module
应该改为 module my-module/v2
,否则引入该库需要在增加 +incompatible
后缀
1 2 3 |
|
解决 GFW 问题
因为一些原因,国内的网络访问不到 golang.org 上的库,好在大部分库在 github 上都有镜像,可以用 replace
命令设置镜像,下面是我碰到的一些库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
GO 1.12 之后支持了一个新的环境变量 GOPROXY,用来设置依赖的代理地址,有两个共用的地址:社区的 goproxy.io
和又拍云的 goproxy.cn
,亲测好用
1 2 |
|
缓存
go mod 更新依赖后会在本地缓存,缓存路径 $GOPATH/pkg/mod
IDE 支持
goland
启用 mod 配置
相关阅读 >>
清晰架构(clean architecture)的go微服务: 程序设计
手撸golang go与微服务 chatserver之4 内存泄漏
更多相关阅读请进入《golang》频道 >>
Go语言101
一个与时俱进的Go编程知识库。