外观
go mod
Phase 01 — Go Fundamentals · 知识点 02
1. 学习目标
- 理解 Go Module 的作用
- 使用
go mod init、go mod tidy管理依赖 - 读懂
go.mod和go.sum - 知道如何添加、升级第三方包
2. 为什么需要
单个 .go 文件可以 go run,但真实项目有多个文件、多个包、第三方依赖。go mod 提供版本化的依赖管理,类似前端的 package.json + lock 文件。
没有 go mod,你无法可靠地复现团队环境,也无法发布可维护的后端项目。
3. 核心概念
| 概念 | 说明 |
|---|---|
| module | 项目的根模块,有唯一 module path |
| go.mod | 模块定义与依赖声明 |
| go.sum | 依赖校验和(类似 package-lock) |
| require | 声明依赖及版本 |
| replace | 本地替换依赖(调试用) |
go.mod 示例
go
module github.com/you/digital-twin
go 1.22
require (
github.com/gin-gonic/gin v1.10.0
)4. 基础语法
bash
# 初始化模块
go mod init github.com/you/agv-server
# 添加依赖(写 import 后自动拉取,或手动)
go get github.com/gin-gonic/gin@v1.10.0
# 整理依赖
go mod tidy
# 查看依赖图
go mod graph最小项目结构:
agv-server/
├── go.mod
├── go.sum
└── main.gogo
package main
import "fmt"
func main() {
fmt.Println("module ready")
}5. 代码解析
module github.com/you/agv-server:模块路径,通常对应 Git 仓库地址go 1.22:最低 Go 版本要求require:直接依赖;间接依赖也会写入 go.modgo mod tidy:添加缺失依赖、删除未使用依赖
6. JavaScript / TypeScript 对比
| Go | Node.js |
|---|---|
| go.mod | package.json |
| go.sum | package-lock.json / pnpm-lock.yaml |
| go get | npm install pkg |
| go mod tidy | npm prune + 自动补依赖 |
| module path | package name |
Go 依赖下载到 $GOMODCACHE(全局缓存),不在每个项目下建 node_modules 巨型目录。
7. 常见错误
- 未 go mod init 就 go get → 先在项目根目录 init
- module path 随意命名 → 团队项目用真实仓库路径
- 提交时漏 go.sum → go.sum 必须进 Git
- 版本冲突 → 用
go mod why/go mod graph排查
8. 实际应用
数字孪生后端项目初始化:
bash
mkdir agv-server && cd agv-server
go mod init github.com/yourteam/agv-server后续引入 Web 框架、Redis、PostgreSQL 驱动都通过 go mod 管理。
9. 深入理解
- Go 使用 Minimal Version Selection (MVS) 选择依赖版本
- 私有仓库需配置
GOPRIVATE环境变量 go work(Go 1.18+)支持 monorepo 多模块工作区
10. 练习
- L1:init 模块,查看 go.mod
- L2:go get 一个包,go mod tidy
- L3:读懂 go.sum 作用
- L4:为 agv-server 项目建立完整 go mod 结构
11. 学习检查
- [ ] go.mod 每行含义?
- [ ] go mod tidy 做什么?
- [ ] 为何需要 go.sum?
12. 下一步
→ package:在 module 内组织代码包
学习导航
上一篇:Go 环境 · 对应练习 · 下一篇:package