Go从1.11
版本开始内置包管理工具,直到1.14
已经正式支持Go Mdoule。以最新版Go1.13为例,学习GO包管。
启用
配置环境变量GO111MODULE
,默认是auto,如果目录中包含go.mod将使用go modules模式
1 | export GO111MODULE=on |
使用
显示命令行帮助
1 | go mod |
进入到项目目录初始化模块
1 | go mod init {moudle-name} |
这里需要注意,你的包名需要与被引入使用的包名一致否则无法匹配,Go将无法编译应用。例如:你将包放到了github.com/xx/package
如果这里指定了{moudle-name}
为package
,那么别人引用此包,将报错无法继续。
1 | go mod tidy |
执行该条命令就开始自动下载安装第三方包了,同时如果有包不在使用,将会从go.mod
中移除。执行go build
也会自动安装依赖,是不是很方便。
go.mod文件说明
示例
1 | module github.com/micro/go-micro |
很直观的就可以看的出来require
就是引用的包格式是 “包名+版本”这的版本
其实就是tag,如果没有tag就会拉取master分支,会是下面的形式
1 | golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 |
20191014212845
是commit的提交时间,da9a3fd4c582
就是此次的commit的哈希。使用go get
时我们可以指定版本或者分支如
1 | go get gitlab.com/xxx/xx@cheuk-go |
如果是手动写入go.mod需要将@
替换成空格,这样就可以正常拉取。
包映射
除了require方式,我们还可以指定require的包使用本地指定的包
1 | replace github.com/BurntSushi/toml v0.3.1 => ./toml |
包github.com/BurntSushi/toml
现在引用了一个我们放在本地的一个目录toml
代理
现在Go第三方有提供了代理,目前有三个
设置环境变量GOPROXY
,direct
表示在出错的时候使用直连。
1 | export GOPROXY=https://goproxy.cn,direct |
私有包
我们开发不可能所有包来自github
,大部分公司都自建了gitlab
服务。需要进行以下两部操作
1 | git config --global url."[email protected]:".insteadOf "http://gitlab.xxx.com/" |
这里将http替换成ssh可以进行免密拉取包。如果我们设置了代理,我们配置GOPRIVATE
让其不走代理
1 | export GOPRIVATE=*.xxx.com |