1. go mod init —— 初始化项目
说明: 在项目的根目录下执行,用来初始化 Go Modules,生成 go.mod 文件。这个文件相当于 Java 的 pom.xml 或 Node.js 的 package.json。
使用场景: 新开始写一个项目,或者要把一个老项目重构成模块化管理。
# 语法:go mod init <模块名称>
# 规范做法:通常使用你的代码托管仓库地址作为模块名,防止命名冲突
go mod init github.com/username/my-go-project
执行后,会在当前目录下生成一个 go.mod 文件,内容类似:
module github.com/username/my-go-project
go 1.22
2. go get —— 添加、更新或删除依赖
说明: 最核心的命令,用于从远程仓库拉取指定的第三方包,并将其自动写入 go.mod 和 go.sum 文件中。
使用场景: 你想在项目中使用某个开源库(比如著名的 Web 框架 Gin)。
📌 常见用法示例:
- 下载最新稳定版:
go get github.com/gin-gonic/gin
执行后,Go 会下载 Gin 及其所有底层依赖,并自动更新 go.mod
- 下载指定版本(Tag):
go get github.com/gin-gonic/gin@v1.9.0
- 下载某个特定的 Git 提交分支或 Hash 值:
go get github.com/gin-gonic/gin@master
- 升级/降级依赖:
直接再次运行 go get 包名@版本号,Go 会自动处理版本替换。
- 删除依赖:
将版本号指定为 @none 即可从项目中移除它:
go get github.com/gin-gonic/gin@none
3. go mod tidy —— 自动整理依赖(神级命令)
说明: 这是开发中最高频使用的命令。 它会扫描你项目里所有的 .go 源码文件,做两件事:
发现你在代码中 import 了、但 go.mod 里没有的包,自动帮你下载并添加进来。
发现你在代码里已经删掉不用的包、但 go.mod 里还残留的,自动帮你清理掉。
使用场景:
-
刚从 GitHub 上 git clone 下来别人的代码,准备开始跑。
-
刚写完一堆代码,引入了不少新库,或者重构删除了不少旧代码。
# 没有任何参数,直接运行即可
go mod tidy
4. go mod graph & go mod why —— 查看依赖关系
当项目变大后,依赖关系会错综复杂。这两个命令可以帮你看清“谁引用了谁”。
🔍 go mod why(查原因)
说明: 告诉你为什么你的项目会依赖某一个特定的包,它会打印出一条依赖链条。
使用示例:
go mod why github.com/google/uuid
输出示例:
# github.com/username/my-go-project
github.com/username/my-go-project/utils
github.com/google/uuid
意思是:你的项目因为引用了 utils 模块,而 utils 模块内部引用了 google/uuid
📊 go mod graph(查全局结构)
说明: 打印出当前项目完整的依赖树结构(文本形式)。
使用示例:
go mod graph
输出示例:
my-project github.com/gin-gonic/gin@v1.9.1
github.com/gin-gonic/gin@v1.9.1 github.com/go-playground/validator/v10@v10.14.0
5. go mod vendor —— 离线缓存依赖(类似本地拷贝)
说明: 将项目所需的所有第三方依赖,全部强制下载到当前项目根目录下的 vendor/ 文件夹中。
使用场景:
-
企业内部不方便联网构建,需要把所有依赖代码和自己的代码一起提交到 Git 仓库。
-
需要确保在完全断网的环境下也能成功编译项目。
go mod vendor
执行后,你的项目结构会多出一个目录:
├── go.mod
├── go.sum
├── main.go
└── vendor/ <-- 所有的第三方库源码都在这里面
后续编译时,可以使用 go build -mod=vendor 强制让 Go 从本地 vendor 目录读取代码,而不再联网检查。
💡 日常开发黄金组合流程
1.克隆代码并进入目录:git clone ... && cd project
2.下载并整理所有依赖:go mod tidy
3.发现需要一个解析 JSON 进阶的库:go get github.com/tidwall/gjson
4.在代码里开开心心写 import "github.com/tidwall/gjson" 并编写业务逻辑。
5.临提交代码前,最后把关一下:go mod tidy(确保没有遗留无用依赖)
6.本地编译测试:go build
注意:转载请携带文章源地址