go get -d 是最安全的依赖下载方式,只拉取指定版本源码到本地缓存,不修改 go.mod、go.sum,也不自动添加 require 或触发 tidy。

go get -d 不修改 go.mod,只下载指定版本
想更新依赖但又怕改坏本地 go.mod?go get -d 是最安全的入口。它只拉代码、不写文件,也不会触发 go.sum 重算或自动 tidy。适合在你刚改完本地 patch、还没 push 到远程时,先预取新版本做对比。
常见错误现象:执行 go get github.com/sirupsen/logrus@v1.9.3 后发现 go.mod 被动了,CI 构建失败——其实是忘了加 -d。
-
go get -d github.com/sirupsen/logrus@v1.9.3:下载 v1.9.3 源码到本地缓存,go.mod和go.sum完全不动 - 如果模块尚未出现在
go.mod中,-d也不会自动添加require行(这点和普通go get本质不同) - 下载后仍需手动 import 并运行
go mod tidy才能真正引入,否则编译会报no required module provides package
replace + go mod download 绕过网络,锁定本地路径
当你手头有个本地修改过的 fork 或调试分支,又不想提交 replace 到团队仓库,可以用 replace 声明路径 + go mod download 强制缓存生效。
使用场景:你在 ./local/logrus 改了日志格式,想验证是否兼容,但又不希望别人 checkout 后直接失败。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 临时写入:
go mod edit -replace=github.com/sirupsen/logrus=./local/logrus - 再执行:
go mod download github.com/sirupsen/logrus—— 这会把本地目录“当作模块”缓存进$GOPATH/pkg/mod,后续go build就不再联网 - 注意:
go mod download all会跳过所有replace条目,所以必须显式指定模块名 - 切记别把
./local/logrus提交进 git;清理时用go mod edit -dropreplace=github.com/sirupsen/logrus
go mod tidy -compat=1.20 不动代码,只重解析依赖约束
升级 Go 版本后,有些依赖突然编译失败,但你并不想动它们的版本号——go mod tidy -compat=1.20 就是为此设计的。它不下载新包,也不改 require 的版本字符串,只是让工具链按新 Go 规则重新解释现有声明。
性能影响很小,但容易被忽略:它会悄悄调整 // indirect 标记、补全缺失的 +incompatible 后缀,甚至把某些隐式依赖从 indirect 升为 direct。
- 执行前确保
go.mod已提交干净,否则tidy可能还原你手动删掉的行 - 加
-v参数能看到具体哪些模块被“重分类”了:go mod tidy -compat=1.20 -v - 它不会解决 API 兼容性问题(比如函数签名变更),只是让依赖图满足新编译器的语义要求
go list -m -u 验证可升级项,避免盲目 go get
直接 go get -u 很危险,尤其在有 replace 或 exclude 的项目里。先跑 go list -m -u 看清局面,比硬上更省时间。
这个命令不改任何文件,纯读取,输出的是“当前 require 范围下,proxy 能提供的最新兼容版本”,不是“最新 tag”。
-
go list -m -u github.com/gorilla/mux:只查单个包 -
go list -m -u -f '{{.Path}} {{.Version}} → {{.Latest}}' all:格式化输出全部可升级项,一眼看出哪些要升、哪些卡在旧版 - 如果输出为空,不代表没更新——可能是你写了
v1.8.0+incompatible,proxy 不提供完整历史,结果就不可靠 - 私有模块未配
GOPRIVATE时会报错,这不是命令问题,是网络策略拦截
go build -v 和 go test ./...。Go 不会在 go get 后自动告诉你某个函数已被移除,或者某个 struct 字段类型变了。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










