GO111MODULE=on 是唯一必须确认的状态;Go 1.16+ 虽默认启用模块模式,但 GO111MODULE 若为 off 或 auto 会导致 import 失败,需执行 go env -w GO111MODULE=on 并清理 shell 配置中相关错误设置。

GO111MODULE=on 是唯一必须确认的状态
Go 1.16+ 默认启用模块模式,但 GO111MODULE 环境变量仍可能被手动设为 off 或残留 auto,这是绝大多数“找不到包”“import 失败”问题的根源。
- 运行
go env GO111MODULE,输出必须是on;若为off或auto,立刻执行go env -w GO111MODULE=on - 检查 shell 配置文件(如
~/.zshrc、~/.bash_profile),删掉任何类似export GO111MODULE=off的行 - 重启终端或运行
source ~/.zshrc(按你实际 shell 类型调整)再验证 -
GO111MODULE=auto最危险:在有go.mod的目录下走模块,在没go.mod的 GOPATH 下 fallback 到旧路径查找,同一命令行为不一致
go mod init 后 import 路径必须与 module 名严格对齐
错误不是“没加 ./”,而是模块声明和 import 语句前缀不匹配。比如 go mod init myproject 之后,所有 import 必须以 myproject/... 开头,否则报 cannot find module providing package。
- 模块名应反映真实可访问路径,推荐用域名前缀:
go mod init github.com/yourname/myapp - 之后
import "github.com/yourname/myapp/config"才合法;写成import "config"或import "./config"都会失败 - 不要用本地路径名(如
go mod init /home/user/myproj)——模块名不能含/或绝对路径 - 如果项目原在
$GOPATH/src/hello,别写go mod init hello,否则旧import "hello/utils"会失效
VS Code 提示 “No modules found” 通常只是工作区没对准
这不是环境变量问题,而是编辑器没识别到模块根目录。gopls 语言服务器只在含 go.mod 的目录及其子目录生效。
- 关闭当前 VS Code 窗口,重新用
code /path/to/your/project(即go.mod所在目录)打开项目 - 确认
go.mod内容完整:至少包含module github.com/xxx/yyy和go 1.xx两行 - 若依赖仍标红,运行
go mod tidy补全依赖并生成go.sum - 仍无效?按
Ctrl+Shift+P→ 输入Go: Restart Language Server强制重载 gopls
GOPATH 在模块模式下仅用于缓存,无需也不该配置为项目根目录
Go 1.16+ 的 GOPATH 只控制 go install 输出位置和 pkg/mod 缓存存放路径,和项目结构无关。强行把它设为项目目录反而干扰模块解析。
立即学习“go语言免费学习笔记(深入)”;
- 不必设置
GOPATH环境变量;即使设置了,也只影响$GOPATH/bin和$GOPATH/pkg/mod - 项目可放在任意路径(桌面、
~/projects、甚至/tmp),只要go.mod存在且GO111MODULE=on -
go get下载的依赖全部存进$GOPATH/pkg/mod,不污染项目目录,也不需要你手动管理src结构 - 唯一要配的代理是
GOProxy:go env -w GOPROXY=https://goproxy.cn,direct(国内必需)
GO111MODULE=auto 这种半开半闭状态,以及 go mod init 后没同步改掉所有 import 前缀。这两点不盯死,其他操作全是白忙。


















