可以,go get 默认安装最新版,需显式指定版本如@v1.9.3或@commit;replace用于临时覆盖依赖路径或版本,exclude已弃用;go get不更新vendor,需手动执行go mod vendor。
可以,但默认行为是安装最新版,必须显式指定版本才能控制。不加版本时 go get github.com/sirupsen/logrus 会拉取 main 或 master 分支的 HEAD,这在模块启用后实际对应的是 latest tagged release(如果有 tag)或 pseudo-version(如果无 tag)。
go get github.com/sirupsen/logrus@v1.9.3
go get github.com/sirupsen/logrus@e5290748...
go get github.com/sirupsen/logrus@fix-panic
go get github.com/sirupsen/logrus@v1.8.1(会更新 go.mod 和 go.sum)replace 用于临时覆盖依赖路径或版本,常见于本地调试、fork 后修改、或规避有问题的上游发布;exclude 则仅在 go build / go test 时跳过某个版本(不是删除),极少用,且 Go 1.16+ 已弃用 exclude(仅保留向后兼容)。
replace github.com/sirupsen/logrus => ../logrus-fix
replace github.com/sirupsen/logrus => github.com/myfork/logrus v0.0.0-20250215102200-abc123
exclude 在现代项目中基本不该出现;若看到它,优先考虑是否该用 replace 或升级/降级依赖错误常表现为 unrecognized import path、cannot find module providing package 或 verifying github.com/...: checksum mismatch。根本原因多是 GOPROXY、网络、校验机制或模块初始化状态问题。
GO111MODULE 是否为 on(推荐全局开启)export GOPROXY=https://goproxy.cn,direct
git config --global url."https://token:x-oauth-basic@github.com/".insteadOf "https://github.com/"
go.sum 或缓存损坏,运行 go clean -modcache 后重试
go get 默认只更新 go.mod 和 go.sum,不会触碰 vendor/。要同步 vendor,必须显式执行 go mod vendor —— 这个命令会按 go.mod 中记录的精确版本拉取所有依赖到 vendor/ 目录,并剔除未被引用的包。
go mod vendor -v(加 -v 可看详细过程)vendor/ 但 go build 仍走网络:检查是否启用了 -mod=vendor,例如:go build -mod=vendor
go mod vendor + go build -mod=vendor,避免网络波动影响构建稳定性go.mod 文件里那行 require 记录,不是你敲的那条 go get 命令。很多人反复 go get 却发现版本回退或冲突,问题往往出在没理解 go.mod 是唯一真相源,其他都是副作用。