Go 语言的依赖管理经历了从 GOPATH 模式到 Go Modules 的演变。理解 go get 命令与 Go Modules 机制的差异,是写好可维护 Go 项目的基础。

go get 的传统工作方式
在 Go 1.11 之前,没有 Go Modules 时,go get 默认把远程仓库的代码克隆到 GOPATH/src 目录下。它不记录版本,总是拉取最新主干代码。
# 旧模式拉取一个包 go get github.com/gin-gonic/gin # 此时代码在 $GOPATH/src/github.com/gin-gonic/gin
这种方式在多项目共用 GOPATH 时,很容易因为某个包被更新而导致构建失败。
Go Modules 是什么
Go Modules 是官方依赖管理方案,项目根目录下的 go.mod 文件记录模块名和依赖版本,go.sum 记录校验值。开启模块模式后,依赖被缓存在本地模块缓存,不再污染 GOPATH。
初始化一个模块
# 初始化模块,生成 go.mod go mod init ippipp.com/myproject # 添加依赖并自动写入 go.mod go get github.com/gin-gonic/gin@v1.9.1
go.mod 文件示例
module ippipp.com/myproject go 1.20 require github.com/gin-gonic/gin v1.9.1
go get 在模块模式下的行为
当项目启用 Go Modules 后,go get 不再往 GOPATH 拉代码,而是更新 go.mod 中的版本约束。你可以指定版本、分支或伪版本。
| 命令 | 作用 |
|---|---|
| go get pkg@latest | 升级到最新发布版本 |
| go get pkg@v1.2.3 | 锁定到指定版本 |
| go get pkg@master | 拉取主干最新提交 |
常见使用建议
- 新项目一律使用 Go Modules,不要退回 GOPATH 模式。
- 提交代码时把 go.mod 和 go.sum 一并提交,保证他人构建一致。
- 用
go_mod_tidy清理未使用的依赖:执行 go mod tidy。
注意:函数调用 go_mod_tidy() 指的是运行命令 go mod tidy,不是某个 HTML 标签。
小结
go get 是一个命令,Go Modules 是一套版本化管理机制。在模块模式下,go get 成为修改依赖版本的工具,而 Go Modules 通过 go.mod 保障项目可重现构建。掌握两者关系,就能从容管理 Go 项目依赖。
Go_Modulesgo_get依赖管理修改时间:2026-07-29 02:36:17