Go mod常用与高级操作

剑心zzw · · 5423 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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/text@v0.3.2
  • 拉取 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/crypto@v0.0.0=github.com/golang/crypto@latest
    go mod edit -replace=golang.org/x/sys@v0.0.0=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环境变量,拉下来的包在{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才行。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:剑心zzw

查看原文:Go mod常用与高级操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5423 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传