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

4 回复

下面是提示的错误信息。工作区里到处都是红色,编程起来有点棘手。

Screen Shot 2022-01-20 at 14.07.15

更多关于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 文件中的错误提示,即使它们运行正常,仍然会弹出错误(见下方)。

Screen Shot 2022-01-20 at 13.23.41

这是一个常见的Go模块导入问题。问题在于你使用了相对路径导入("./database"),这在Go模块中是不允许的。

解决方案:

  1. 初始化Go模块(如果还没做):
go mod init your-project-name
  1. 修改导入路径为模块路径
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")
}
  1. 确保正确的目录结构
your-project-name/
├── go.mod
├── go.sum
├── main.go
├── database/
│   └── database.go
└── routes/
    └── routes.go
  1. 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
}
  1. 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文件中的模块名称是否与导入路径一致。

回到顶部