go mod init 失败因 go111module=off,需执行 go env -w go111module=on;项目勿放 $gopath/src 下;vscode 需正确配置 go.gopath 和工作区;装库超时须设 goproxy=https://goproxy.cn,direct。

Go 环境能跑 go run 不等于能写微服务——缺 go mod、没配对 GOPATH、GOROOT 混用,后续装 gin 或 gopls 会卡在依赖解析或 IDE 报错上。
go version 能跑,但 go mod init 失败怎么办
常见现象是执行 go mod init example.com/hello 报错 go: modules disabled by GO111MODULE=off 或提示找不到 go.sum。这不是 Go 没装好,而是模块模式没启用。
-
GO111MODULE必须设为on(Go 1.16+ 默认开启,但某些旧 shell 配置或 IDE 启动环境可能覆盖它) - 检查方式:终端运行
go env GO111MODULE,输出不是on就要手动设:go env -w GO111MODULE=on - 如果项目目录在
$GOPATH/src下,go mod会自动降级为 GOPATH 模式——直接把项目挪到任意非$GOPATH路径下再试
VSCode 里 import 提示 unresolved,但 go run 正常
这是 gopls(Go 语言服务器)没正确识别模块根目录或 GOPATH 路径不一致导致的。VSCode 的 Go 扩展不会自动继承你终端里的环境变量。
- 确认
gopls已安装:终端执行which gopls,没输出就运行go install golang.org/x/tools/gopls@latest - VSCode 设置里搜
go.gopath和go.toolsGopath,两个都填成go env GOPATH的实际输出路径(比如/Users/you/go) - 项目根目录下必须有
go.mod文件,且 VSCode 是以该目录为工作区打开的(不是只打开单个.go文件)
装 gin、viper 这类库时反复 timeout 或 checksum mismatch
国内直连 proxy.golang.org 经常失败,go get 默认行为会卡住或拉错版本,不是网络问题,是代理策略没切对。
- 优先用官方推荐的国内代理:
go env -w GOPROXY=https://goproxy.cn,direct - 避免混用多个代理(比如同时设
GOPROXY和GO111MODULE以外的环境变量),direct表示私有模块走直连,别删掉 - 如果已拉过损坏缓存,执行
go clean -modcache再重试,否则go mod download仍会复用错误包
最易被忽略的是:GOROOT 和 GOPATH 的边界。前者是 Go 安装目录(比如 /usr/local/go),后者是你放代码和第三方包的地方(比如 $HOME/go)。两者不能相同,也不能让项目路径落在 $GOPATH/src 里——现代 Go 开发只认 go.mod,GOPATH 仅用于存放 go install 的二进制工具。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











