go-包管理
- 目前go的包管理主流使用 Go Modules
go包管理方案
| 方案 | 现在是否推荐 | 作用 |
|---|---|---|
| Go Modules | ✅ 官方主流 | 依赖管理、版本管理 |
| vendor | ✅ 特定场景 | 把依赖复制进项目 |
| dep | ❌ 已淘汰 | Go Modules 出现前的依赖管理 |
| glide | ❌ 已淘汰 | 早期第三方包管理工具 |
| GOPATH | ❌ 不作为现代包管理方案 | Go 早期项目组织/依赖方式 |
Go Modules
- Go Modules 是 Go 官方的依赖管理机制,也是现在 Go 项目默认、标准的包管理方案
- Module 可以理解为一个Go项目
- 通过go mod init 初始化一个Go项目,就会生成一个go.mod
- 这个go.mod会包含一些依赖、Module 名称
- 通过go mod init 初始化一个Go项目,就会生成一个go.mod
- 通过
go mod tidy会自动整理依赖- 当代码中把包引用删除了,执行tidy,就会自动清除依赖
- tidy理解为整理,整理依赖,整理一些没有用到的依赖自动清除
常用命令
go mod tidy检查依赖 + 自动补齐缺失依赖 + 下载依赖 + 删除无用依赖。- 会自动分析当前项目的所需依赖进行整理
| 命令 | 作用 | 类比 Node |
|---|---|---|
go mod init xxx | 初始化 Go Module | npm init |
go mod tidy | 自动分析代码依赖,整理依赖包 | 类似整理 package.json |
go get xxx | 添加/升级依赖 | npm install xxx |
go mod download | 下载依赖 | npm install 的下载部分 |
go mod graph | 查看依赖关系图 | 查看 dependency tree |
go mod why xxx | 查看为什么依赖某个包 | 查依赖来源 |
go list -m all | 查看所有 Module | npm list |
go mod verify | 校验依赖是否被修改 | 依赖完整性检查 |
go run . | 编译并直接运行当前项目 | npm run dev / node app.js |
go build -o app | 编译并指定输出文件名 | 指定构建产物名 |
对比js的包管理
go mod init demo = npm init
Go Modules ≈ npm / pnpm 依赖管理体系
go.mod ≈ package.json
go.sum ≈ pnpm-lock.yaml
Module Cache ≈ pnpm 全局 store
基本使用
# 初始化项目
go mod init demo
# 添加 / 更新依赖
go get github.com/gin-gonic/gin
# 指定版本
go get github.com/gin-gonic/gin@v1.10.0
# 自动整理依赖
go mod tidy
# 下载依赖
go mod download
# 查看所有模块
go list -m all