Go mod常用与高级操作

1. 开启Go module

1.11和1.12版本

将下面两个设置添加到系统的环境变量中

GO111MODULE=on
GOPROXY=https://goproxy.io

1.13版本之后

这种方式并不会覆盖之前的配置,需要先把系统的环境变量里面的给删掉再设置

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

2. go get使用

使用go module之后,go get 拉取依赖的方式就发生了变化

  • 下载项目依赖
    go get ./...
  • 拉取最新的版本(优先择取 tag)
    go get golang.org/x/text@latest
  • 拉取 master 分支的最新 commit
    go get golang.org/x/text@master
  • 拉取 tag 为 v0.3.2 的 commit
    go get golang.org/x/[email protected]
  • 拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2:
    go get golang.org/x/text@342b2e
  • 指定版本拉取,拉取v3版本
    go get github.com/smartwalle/alipay/v3
  • 更新
    go get -u

3. mod基本操作

  1. 初始化一个moudle,模块名为你项目名
    go mod init 模块名

  2. 下载modules到本地cache

    目前所有模块版本数据均缓存在 $GOPATH/pkg/mod和 ​ $GOPATH/pkg/sum 下

    go mod download

  3. 编辑go.mod文件 选项有-json、-require和-exclude,可以使用帮助go help mod edit
    go mod edit

  4. 以文本模式打印模块需求图
    go mod graph

  5. 删除错误或者不使用的modules
    go mod tidy

  6. 生成vendor目录
    go mod vendor

  7. 验证依赖是否正确
    go mod verify

  8. 查找依赖
    go mod why

4. mod高级操作

  1. 更新到最新版本
    go get github.com/gogf/gf@version

    如果没有指明 version 的情况下,则默认先下载打了 tag 的 release 版本,比如 v0.4.5 或者 v1.2.3;如果没有 release 版本,则下载最新的 pre release 版本,比如 v0.0.1-pre1。如果还没有则下载最新的 commit

  2. 更新到某个分支最新的代码
    go get github.com/gogf/gf@master
  3. 更新到最新的修订版(只改bug的版本)
    go get -u=patch github.com/gogf/gf
  4. 替代只能下载的库
    go mod edit -replace=golang.org/x/[email protected]=github.com/golang/crypto@latest
    go mod edit -replace=golang.org/x/[email protected]=github.com/golang/sys@latest
    
  5. 清理moudle 缓存
    go clean -modcache
  6. 查看可下载版本
    go list -m -versions github.com/gogf/gf

5. go mod自动下载私有仓库gitlab中的包

  1. 设置系统环境变量:export GOPROXY=https://proxy.cn,direct

  2. 假如我在私有仓库http://gitlab.mylab.com上有个hello/hi包,地址当然就是http://gitlab.mylab.com/hello/h

  3. windows系统, 直接编译,会报https 443端口连接错误,拉不到gitlab项目,当然了,因为gitlab 是http 80端口。
    在项目所在目录执行如下命令也是一样报错。
    go mod download hello/hi
    然后执行了一句命令:
    go get -insecure hello/hi
    这样拉下来一次(如果配置了GOPATH环境变量,拉下来的包在 G O P A T H / p k g / m o d 里 , 否 则 是 在 {GOPATH}/pkg/mod里,否则是在 GOPATH/pkg/mod{USER}/go/pkg/mod里)之后,神奇的事情发生了,直接编译可以成功拉到gitlab上的包了。
    并且执行如下命令也可以成功拉取了:
    go mod download hello/hi
    尴尬的是,再执行go get -insecure hello/hi反而报错:missing dot in first path element

  4. Linux系统:
    与windows设不设GOPRIVATE都一样的情况略有差异,linux上必需要先设置环境变量GOPRIVATE="我的gitlab地址",告诉go这是一个私有仓库,不要用代理去拉,而是直接拉。剩下的与windows一样,还是要先执行一次go get -insecure hello/hi才行。

你可能感兴趣的:(Go)