这是go编译器禁止使用相对路径(如"./mymodule"或"../utils")导入包的硬性错误,因import路径必须是绝对路径——modules模式下需匹配go.mod中module声明的完整路径,旧gopath模式下须对应$gopath/src下的子目录结构。

local imports not allowed 是什么问题
这是 Go 编译器在构建时抛出的硬性错误,不是警告,也不是路径拼写问题。典型报错:import "./mymodule" is not allowed 或 import "../utils" is not allowed。它意味着你试图用相对路径(./、../)或本地文件系统路径导入包——Go 不允许这么做,无论是否启用 Modules。
为什么不能用 ./ 或 ../ 导入
Go 的 import 路径必须是**绝对路径**,即从 $GOPATH/src(旧模式)或模块根目录(Modules 模式)开始的完整路径。编译器靠这个路径做两件事:定位源码、校验 import 一致性(比如防止循环引用、internal 包越界)。相对路径会破坏这套机制,所以直接拒绝。
- 即使你在当前目录下有
utils/子目录,也不能写import "./utils" -
go build和go run都会报这个错,不取决于是否在src下执行 - 该限制与
GOPATH是否设置无关,Modules 模式下同样生效
正确组织目录并修复 import
核心原则:所有 import 路径必须能映射到一个明确的、可解析的模块路径或 $GOPATH/src 下的子路径。
- 如果你用 Modules(推荐),项目根目录要有
go.mod,所有子包都通过模块名 + 相对路径导入,例如模块名是github.com/you/project,那么project/utils应该被导入为github.com/you/project/utils - 如果不用 Modules(已过时但仍有遗留项目),代码必须放在
$GOPATH/src下,且 import 路径要匹配目录结构,例如$GOPATH/src/myapp/utils→ 导入"myapp/utils" - 不要把多个独立项目塞进同一个
src子目录;每个项目应有自己顶层路径,比如$GOPATH/src/github.com/you/cli和$GOPATH/src/github.com/you/lib是两个独立 import 根
容易忽略的细节
很多人改完 import 路径后仍报错,往往卡在这几个点:
-
go.mod文件里的module声明和实际 import 路径不一致,比如写了module example.com/app却在代码里写import "github.com/you/app/utils" - 编辑器缓存了旧 import 路径(尤其 VS Code + Go 插件),重启语言服务器或执行
go mod tidy才能刷新 - 项目里混用了 Modules 和 GOPATH 模式,
GO111MODULE=off环境变量没关,导致 Go 工具链降级到 GOPATH 查找逻辑,但你的目录又不在$GOPATH/src下 - Windows 上路径分隔符写成反斜杠
\或混合使用,虽然 Go 通常自动转换,但在某些工具链(如旧版 gopls)中可能触发解析异常
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











