GoLand模块依赖配不起来主因是go.mod module声明与Git路径不一致或GO111MODULE未真正生效,必须设GO111MODULE=on、module名严格匹配远程地址、replace用合法相对路径且目标含go.mod。

GoLand 里模块依赖配不起来,90% 不是 IDE 设置问题,而是 go.mod 的 module 声明和实际 Git 路径不一致,或者 GO111MODULE 没真正生效。
GO111MODULE=on 必须全局设死,不能靠 auto
GoLand 启动时不会自动帮你设环境变量,它只读取当前 shell 或系统已生效的值。auto 模式在 /tmp、桌面目录或没 go.mod 的空文件夹下会直接退化成 GOPATH 模式,导致 go mod tidy 报 “not in a module”。
- 执行
go env -w GO111MODULE=on(永久生效,推荐) - Windows PowerShell 用户若提示“无法写入”,改用
set GO111MODULE=on临时生效,但每次新开 Terminal 都得重输 - 验证:在 GoLand 底部 Terminal 运行
go env GO111MODULE,输出必须是on,不是auto或空
go.mod 的 module 行必须匹配远程仓库地址
你 push 到 GitHub 的地址是 github.com/yourname/api-server,那 go.mod 第一行就必须是 module github.com/yourname/api-server。写成 module api-server 或 module myproject 看似能本地 build,但别人 go get 时必然报 checksum mismatch,CI 也会挂。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 初始化项目时,不要用
go mod init api-server,而要用go mod init github.com/yourname/api-server - 私有 GitLab 实例?写成
go mod init gitlab.example.com/group/project - 本地开发暂无远程地址?至少用
go mod init example.com/myproject,绝不能裸名 - 改过
module名后,所有下游 import 语句、CI 脚本、Dockerfile 中的go get都要同步改,否则引用失效
replace 路径必须是相对路径,且目标含 go.mod
本地调试多模块项目(比如主服务依赖一个独立 utils 库),replace 是唯一安全方式。但它对路径格式极其敏感——绝对路径、~/、C:\ 全都不认,只接受以 ../ 或 ./ 开头的相对路径。
- 主模块在
./service,utils 在../utils,则service/go.mod末尾加:replace github.com/yourname/utils => ../utils -
../utils目录下必须存在有效的go.mod(哪怕只是module github.com/yourname/utils),否则 Go 会 fallback 到 legacy mode,依赖树错乱 -
replace只影响当前模块构建,go list -m all不会显示它,go mod vendor也不会收录它——别指望靠它“打包进发布物”
GOPROXY 和 GOSUMDB 要在 GoLand 设置里显式填,不能只信系统变量
GoLand 的 Terminal 可能继承系统变量,但它的索引、自动补全、依赖下载逻辑走的是 Settings 里配置的环境。系统里设了 GOPROXY=https://goproxy.cn,direct,但 GoLand Settings 里没填,IDE 就可能卡在 “Resolving dependencies…” 或提示 “Unresolved reference”。
- 打开
File → Settings → Go → Go Modules - 勾选
Enable Go Modules integration - 在
Environment栏填:GOPROXY=https://goproxy.cn,direct和GOSUMDB=gosum.io+ce6e75650+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6 - 点
Apply后,右键go.mod→Download modules手动触发一次,看底部 Terminal 是否正常拉取
最易被忽略的其实是 go.mod 路径命名、go mod tidy 的扫描范围、以及 go.sum 校验触发时机这三点——它们不报错,但会让别人引用你的模块失败,或让 CI 在某次提交后突然崩掉。

















