2.23 Go之go mod包依赖管理工具使用详解
go module
Go
语言默认的依赖管理工具
使用module
设置GOMODULE
设置GoModule
-
GOMODULE=off
禁用go module
,编译时会从GOPATH
和vendor
文件夹中查找包; -
GOMODULE=on
启用 go module,编译时会忽略GOPATH
和vendor
文件夹,只根据go.mod
下载依赖; -
GOMODULE=auto
(默认值),当项目在 GOPATH/src 目录之外,并且项目根目录有go.mod
文件时,开启go module
。
Windows
下设置:
set GO111MODULE = on 或者 set GO111MODULE = auto
MacOS
或者Linux
下设置:
export GO111MODULE = on 或者 export GO111MODULE = auto
go mod
命令
命令 | 作用 |
---|---|
go mod download | 下载依赖包到本地(默认为 GOPATH/pkg/mod 目录) |
go mod edit | 编辑 go.mod 文件 |
go mod graph | 打印模块依赖图 |
go mod init | 初始化当前文件夹,创建 go.mod 文件 |
go mod tidy | 增加缺少的包,删除无用的包 |
go mod vendor | 将依赖复制到 vendor 目录下 |
go mod verify | 校验依赖 |
go mod why | 解释为什么需要依赖 |
GOPROXY
proxy
代理服务器。国内有防火墙存在,所以有些第三方包无法通过go get
获取。所以需要设置GOPROXY
通过中间代理商获取到相应的资源。
目前公开的代理服务器:
-
goproxy.io
; -
goproxy.cn
:(推荐)由国内的七牛云提供。
windows
下设置:
go env -w GOPROXY=https://goproxy.cn,direct // 域名
MacOs
或者Linux
下设置:
export GOPROXY=https://goproxy.cn
使用go get下载指定版本的依赖包
执行go get
命令,在下载依赖包的同时还可以指定依赖包的版本。
-
运行
go get -u
命令会将项目中的包升级到最新的次要版本或者修订版本; -
运行
go get -u=patch
命令会将项目中的包升级到最新的修订版本; -
运行
go get [包名]@[版本号]
命令会下载对应包的指定版本或者将对应包升级到指定的版本。
go get [包名]@[版本号]命令中版本号可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。
在项目中使用
使用Goland
新建项目会初始化一个go.mod
文件。go.mod
文件一旦创建后,它的内容将会被go toolchain
全面掌控,go toolchain
会在各类命令执行时,比如go get
、go build
、go mod
等修改和维护go.mod
文件。
go.mod
提供了module
、require
、replace
和exclude
四个命令:
-
module
语句指定包的名字(路径); -
require
语句指定的依赖项模块; -
replace
语句可以替换依赖项模块; -
exclude
语句可以忽略依赖项模块。
升级依赖:
使用命令go list -m -u all
来检查可以升级的 package,使用go get -u need-upgrade-package
升级后会将新的依赖版本更新到 go.mod *
也可以使用go get -u
升级所有依赖
使用replace替换无法直接获取的package
modules
可以通过在go.mod
文件中使用replace
指令替换成github
上对应的库
replace (
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下