好好爱自己!

【转】Go mod常用与高级操作

原文:https://www.jianshu.com/p/36556e8c3970

----------------------------------------

 

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. 替代只能FQ下载的库
    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才行。



posted @   立志做一个好的程序员  阅读(589)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2019-07-28 Golang 本身是用什么语言写的?
2019-07-28 go语言defer关键字背后的实现,语法,用法
2019-07-28 go语言的defer语句
2019-07-28 【转】Golang汇编命令解读
2017-07-28 ubuntu网卡ip的配置
2017-07-28 线程池的研究
2016-07-28 PHP foreach 遍历数组是打印出相同的数据

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示