Golang运行时报错:非本地包中出现本地导入 "./database"
Golang运行时报错:非本地包中出现本地导入 “./database” 你好,我是Go语言(结合React和Fiber框架)的初学者。我刚开始学习一个在YouTube上找到的教程(使用JWT令牌进行Golang API身份验证 - YouTube)。
教程作者可以轻松地使用本地导入,但在我尝试运行main.go时却遇到了错误。
main.go:4:2: local import "./database" in non-local package
main.go:6:2: local import "./routes" in non-local package
下面是我的main.go文件(我也已经创建了相应的目录结构)。
package main
import (
"./database"
"./routes"
"github.com/gofiber/fiber/v2"
)
func main() {
database.Connect()
app := fiber.New()
routes.Setup(app)
app.Listen(":3000")
}
请帮帮我,我已经被这个问题困扰好几天了,一直在尝试寻找解决方案。(我读到Go不支持本地导入,但为什么在那个教程里它运行得很顺利呢?)
更多关于Golang运行时报错:非本地包中出现本地导入 "./database"的实战教程也可以访问 https://www.itying.com/category-94-b0.html
下面是提示的错误信息。工作区里到处都是红色,编程起来有点棘手。

更多关于Golang运行时报错:非本地包中出现本地导入 "./database"的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这很奇怪。在我这边没有看到这个问题(我在 Gitpod.io 工作区中使用 VSCode 实例)。
从终端中可以看到,代码在你那边似乎可以编译。所以问题可能出在 VSCode 上。
- 尝试重启语言服务器(命令面板 > Go: 重启语言服务器)
- 也许还可以检查一下 VSCode Go 扩展的设置,看看是否有自定义设置,比如替代工具路径,这些设置可能启用了错误的工具(或错误版本的工具)
github.com/dgrijalva/jwt-go
您好,先生,感谢您的帮助,真的,我已经为此困扰了好几天,谢谢。
按照您的步骤操作后,一切工作正常,go build 成功执行,没有错误。
现在,我需要处理每个 Go 文件中的错误提示,即使它们运行正常,仍然会弹出错误(见下方)。

这是一个常见的Go模块导入问题。问题在于你使用了相对路径导入("./database"),这在Go模块中是不允许的。
解决方案:
- 初始化Go模块(如果还没做):
go mod init your-project-name
- 修改导入路径为模块路径:
package main
import (
"your-project-name/database"
"your-project-name/routes"
"github.com/gofiber/fiber/v2"
)
func main() {
database.Connect()
app := fiber.New()
routes.Setup(app)
app.Listen(":3000")
}
- 确保正确的目录结构:
your-project-name/
├── go.mod
├── go.sum
├── main.go
├── database/
│ └── database.go
└── routes/
└── routes.go
- 在
database/database.go中:
package database
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var DB *gorm.DB
func Connect() {
// 你的数据库连接代码
dsn := "host=localhost user=postgres password=postgres dbname=yourdb port=5432 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
DB = db
}
- 在
routes/routes.go中:
package routes
import (
"github.com/gofiber/fiber/v2"
"your-project-name/controllers"
)
func Setup(app *fiber.App) {
// 你的路由设置代码
app.Get("/api/users", controllers.GetUsers)
app.Post("/api/register", controllers.Register)
}
为什么教程能运行而你不能? 可能的原因:
- 教程使用的是旧版本的Go(Go 1.10之前),那时还支持相对导入
- 教程作者可能使用了
GOPATH模式而不是Go模块 - 视频可能没有展示完整的项目设置过程
验证步骤:
# 检查Go版本
go version
# 初始化模块后运行
go run main.go
# 如果需要,下载依赖
go mod tidy
如果还有问题,请检查go.mod文件中的模块名称是否与导入路径一致。

