GoLand中GO111MODULE没生效需在Settings→Go→Go Modules勾选启用,并在Environment中手动添加GO111MODULE=on和GOPROXY=https://goproxy.cn,direct,保存后重启IDE并验证go env输出为on。

GoLand里GO111MODULE没生效,其实是环境变量没写对
GoLand不读系统PATH里的go命令,也不自动继承终端的环境变量。即使你在PowerShell里执行go env -w GO111MODULE=on成功了,IDE仍可能按默认auto或off跑,导致go.mod被忽略、依赖标红、go run报“package not found”。
必须在GoLand内部显式设置:
- 打开
Settings → Go → Go Modules - 勾选
Enable Go Modules integration - 在
Environment框里填:GO111MODULE=on(不是on加引号,也不是export) - 同时补上代理:
GOPROXY=https://goproxy.cn,direct - 点击
Apply,然后重启GoLand
重启后终端里执行go env | findstr GO111MODULE(Windows)或go env | grep GO111MODULE(macOS/Linux),应输出GO111MODULE="on"才算真正生效。
新建项目时go.mod没自动生成,检查有没有go.work干扰
点New Project → Go Module后没生成go.mod,或者右下角“Initialize Go Modules”提示一直转圈,大概率是当前目录或父目录存在go.work文件。这个文件会强制启用多模块工作区模式,覆盖单模块行为,尤其常见于用过go work init或从旧项目复制过来的目录。
立即学习“go语言免费学习笔记(深入)”;
解决办法很直接:
- 在项目根目录及所有上级目录中搜索
go.work - 找到就删掉(不是重命名,是彻底删除)
- 回到GoLand,右键项目根目录 →
Reload project - 或者手动在Terminal中执行:
go mod init example.com/myapp
注意:模块名可以是任意合法字符串,不一定要是域名;但一旦定下,后续import路径就得匹配它。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
本地包import失败,replace语句位置和写法要严格
想引用同项目的子目录(比如./libs),但import "libs"报错“cannot find module”,不是路径写错了,而是replace没放在正确位置——它必须写在**主模块的go.mod里**,且只能出现在require块之后、exclude或retract之前。
例如主模块是testgreet,libs在同级子目录,正确写法是:
module testgreet go 1.25 require libs v0.0.0-00010101000000-000000000000 // indirect replace libs => ./libs
关键点:
-
replace行不能缩进,不能加//注释 -
./libs是相对于主go.mod的路径,不是相对于main.go - 子模块
libs/go.mod里必须有module libs声明 - 改完后必须执行
go mod tidy,否则IDE不识别
依赖下载卡住或超时,代理和校验必须配全
配置了GOPROXY=https://goproxy.cn,direct但go mod tidy还是卡在verifying github.com/xxx,说明GOSUMDB没关或没设对。国内代理镜像通常不提供完整校验服务,不关它就会反复尝试连接官方sum.golang.org,最终超时。
两个选择任选其一:
- 关掉校验(开发阶段够用):
go env -w GOSUMDB=off - 换国内校验源(更安全):
go env -w GOSUMDB="gosum.io+ce6e75650+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6"
注意:GOSUMDB和GOPROXY都得用go env -w写入,仅改GoLand Settings里的Environment不够——因为go mod命令本身不读IDE配置,只读go env。
最后提醒一句:所有go env -w操作后,务必重启GoLand,否则IDE底层调用的go进程仍用旧环境。

















