Go Module包管理工具 + Govendor包管理

Go Mod

Go 1.11提出的新的包管理思路,支持用 模块 的方式看一个Go程序,用go.mod管理版本信息,基本是自动生成 

GO111MODULE=on //忽略vendor和gopath下的文件夹

1. 基本操作

 生成空的go.mod文件

go mod init <your module path>

 自动填写依赖,生成go.sum。sum主要为了记录曾经用过的以来,用版本的hash做记录。

go build

    更改完后,查看当前依赖和版本 ===> 需要重新 go build 更新 mod 文件

go list -m all
go list -m -version '可能是git上的链接' //查看过去版本号

    如果需要手动修改依赖,使用分支版本/过去的版本,用以下命令行:

go mod edit -replace 'module name'

  回退版本:

 

go get github.com/gin-gonic/gin@v1.1.4 获取之前版本,这样版本就回退了。。

go mod edit -require="github.com/gin-gonic/gin@v1.1.4"  + go tidy  更改依赖版本号,并下载对应包。。

 

升级版本:

 

go get -u  
go get <repos>@<branch name>//update to the lastest version of current branch

下载需要的package

go mod download

2. 其他命令

     清除不需要的依赖

go mod tiny

find out where any of your dependencies are used

go mod why -m <module>

mod生成vendor目录

go mod vendor

 

3. 代理

1.1时推出的新环境变量,为golang的代码仓库做镜像代理

如何配置:

配置环境变量

export GOPROXY=https://。。。。

proxy失败后,不会自动回源,因此可以用goc工具,

可用代理:

gocenter.io

 goproxy.io

 

 

Go vendor

过去go vendor提出的包管理工具,原理就是把GOPATH下管理的文件拷贝到项目目录下的vendor目录下,如果项目目录下有vendor文件夹,那优先调用vendor目录下的依赖。

 

1. 初始化

govendor init

2. 加入现有依赖,一次性加入所有依赖库

govendor add +external

3. 添加本地GOPATH下的依赖(当你开始编辑了项目,调用了新的依赖)

govendor add [addr]@[version / commit id]

4. 获取本地不存在 或 不是最新的 (从网上获取,介于部分依赖地址属于被安全上网的范畴内,可能需要配置代理)

govendor fetch 

5. 移除

govendor remove [addr] / +unused

 

govendor命令比较简单,可以直接使用govendor --help获取提示信息,功能正如字面意思一样。

-> 有些坑在于,无法解决循环依赖的问题,而且本地库不够新,用update会出现没什么卵用的情况,更新后会疯狂调用报错,可能会出现需要大范围go get更新本地代码库==

-> 并且当vendor.json里已经失效包时,需要手动删除.json里的对应条目

 

介于govendor已经没有人维护了,可以优先使用go mod,虽然也很垃圾

 

posted @ 2019-06-26 18:03  森淼clover  阅读(1432)  评论(0编辑  收藏  举报