Go module 初始化失败主因是未在项目根目录执行go mod init或go.mod位置错误;本地包导入必须使用模块名前缀的逻辑路径而非文件路径,且internal包不可跨模块引用。
本地包无法导入,最常见原因是当前目录没启用 Go modules,或者 go.mod 不在预期位置。Go 1.11+ 默认依赖 go.mod 管

no required module provides package。
go mod init example.com/myapp(模块名可自定义,但需是合法域名格式)$GOPATH/src 下(否则可能触发 GOPATH 模式,导致行为不一致)./pkg/utils,则导入语句必须是 import "example.com/myapp/pkg/utils",而非 import "./pkg/utils" —— Go 不支持文件系统路径式导入Go 导入路径不是文件路径,而是模块内逻辑路径。即使包在 ./internal/log,只要 go.mod 中模块名为 example.com/myapp,就必须用 import "example.com/myapp/internal/log"。
go.mod 第一行:如为 module github.com/user/project,所有本地包导入都必须以该前缀开头../ 或 .,这类写法在 Go 中非法./vendor/ 下,也不应手动导入;go build 会自动从 vendor 解析,前提是已运行 go mod vendor
当你正在同时开发主项目和一个本地库(比如 github.com/user/lib),又不想发布新版本,可以用 replace 指向本地路径,让构建时加载未发布的修改。
replace github.com/user/lib => ../lib
replace 必须写在 go.mod 文件中,且路径 ../lib 是相对于 go.mod 所在目录的绝对或相对路径go mod tidy 后,go.sum 会记录替换后的校验值,但不会把本地代码打包进模块replace,部署前建议临时注释掉并验证是否仍能拉取远程版本放在 internal/ 目录下的包默认只能被同一模块内代码导入。如果另一个本地模块(比如 example.com/cli)试图导入 example.com/myapp/internal/config,会报错 use of internal package not allowed。
internal/,放到独立的公共子模块(如 example.com/myapp/config),并在 go.mod 中保持统一模块名internal 限制,Go 在解析时会检查真实路径,符号链接无效go.mod 的模块名与实际目录结构的映射关系,后续所有 go build、go test 都会连锁失败。