【转】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基本操作
-
初始化一个moudle,模块名为你项目名
go mod init 模块名
-
下载modules到本地cache
目前所有模块版本数据均缓存在
GOPATH/pkg/sum 下
go mod download
-
编辑go.mod文件 选项有-json、-require和-exclude,可以使用帮助go help mod edit
go mod edit
-
以文本模式打印模块需求图
go mod graph
-
删除错误或者不使用的modules
go mod tidy
-
生成vendor目录
go mod vendor
-
验证依赖是否正确
go mod verify
-
查找依赖
go mod why
4. mod高级操作
- 更新到最新版本
go get github.com/gogf/gf@version
如果没有指明 version 的情况下,则默认先下载打了 tag 的 release 版本,比如 v0.4.5 或者 v1.2.3;如果没有 release 版本,则下载最新的 pre release 版本,比如 v0.0.1-pre1。如果还没有则下载最新的 commit
- 更新到某个分支最新的代码
go get github.com/gogf/gf@master
- 更新到最新的修订版(只改bug的版本)
go get -u=patch github.com/gogf/gf
- 替代只能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
- 清理moudle 缓存
go clean -modcache
- 查看可下载版本
go list -m -versions github.com/gogf/gf
5. go mod自动下载私有仓库gitlab中的包
-
设置系统环境变量:
export GOPROXY=https://proxy.cn,direct
-
假如我在私有仓库http://gitlab.mylab.com上有个hello/hi包,地址当然就是http://gitlab.mylab.com/hello/h
-
windows系统, 直接编译,会报https 443端口连接错误,拉不到gitlab项目,当然了,因为gitlab 是http 80端口。
在项目所在目录执行如下命令也是一样报错。
go mod download hello/hi
然后执行了一句命令:
go get -insecure hello/hi
这样拉下来一次(如果配置了GOPATH环境变量,拉下来的包在{USER}/go/pkg/mod里)之后,神奇的事情发生了,直接编译可以成功拉到gitlab上的包了。
并且执行如下命令也可以成功拉取了:
go mod download hello/hi
尴尬的是,再执行go get -insecure hello/hi
反而报错:missing dot in first path element
。 -
Linux系统:
与windows设不设GOPRIVATE都一样的情况略有差异,linux上必需要先设置环境变量GOPRIVATE="我的gitlab地址"
,告诉go这是一个私有仓库,不要用代理去拉,而是直接拉。剩下的与windows一样,还是要先执行一次go get -insecure hello/hi才行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 遍历数组是打印出相同的数据