GO跟依赖相关的命令说明以及使用例子

爱丽思 12天前 ⋅ 62 阅读

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