Skip to content

go mod

Phase 01 — Go Fundamentals · 知识点 02


1. 学习目标

  • 理解 Go Module 的作用
  • 使用 go mod initgo mod tidy 管理依赖
  • 读懂 go.modgo.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.go
go
package main

import "fmt"

func main() {
    fmt.Println("module ready")
}

5. 代码解析

  • module github.com/you/agv-server:模块路径,通常对应 Git 仓库地址
  • go 1.22:最低 Go 版本要求
  • require:直接依赖;间接依赖也会写入 go.mod
  • go mod tidy:添加缺失依赖、删除未使用依赖

6. JavaScript / TypeScript 对比

GoNode.js
go.modpackage.json
go.sumpackage-lock.json / pnpm-lock.yaml
go getnpm install pkg
go mod tidynpm prune + 自动补依赖
module pathpackage name

Go 依赖下载到 $GOMODCACHE(全局缓存),不在每个项目下建 node_modules 巨型目录。


7. 常见错误

  1. 未 go mod init 就 go get → 先在项目根目录 init
  2. module path 随意命名 → 团队项目用真实仓库路径
  3. 提交时漏 go.sum → go.sum 必须进 Git
  4. 版本冲突 → 用 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