如何在控制器中导入模型



下面是我的代码模型。

package models
type Goal struct {
Id        int    `json:"id"`
Title     string `json:"title"`
Status        bool   `json:"status"`
}

当我在控制器中导入模型包并想使用时,它会给我一个错误。

package controllers
import (
"strconv"
"github.com/gofiber/fiber/v2"
"github.com/RohitKuwar/go_fiber/models"  //error:"github.com/RohitKuwar/go_fiber/models" imported but not used
)
var goals = []Goal{     //error:undeclared name: Goal
{
Id:        1,
Title:     "Read about Promises",
Status:    "completed",
},
{
Id:        2,
Title:     "Read about Closures",
Status:    "active",
},
}
func GetGoals(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(goals)
}
func CreateGoal(c *fiber.Ctx) error {
type Request struct {
Title   string  `json:"title"`
Status  string  `json:"status"`
}
var body Request
err := c.BodyParser(&body)
// if error
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"message": "Cannot parse JSON",
"error":   err,
})
}
// create a goal variable
goal := &Goal{     //error:undeclared name: Goal
Id:        len(goals) + 1,
Title:     body.Title,
Status:      body.Status,
}

但是当我像下面这样在控制器中编写模型时,一切都很好。

import (
"strconv"
"github.com/gofiber/fiber/v2"
)
type Goal struct {
Id        int    `json:"id"`
Title     string `json:"title"`
Status    string  `json:"status"`
}
var goals = []Goal{
{
Id:        1,
Title:     "Read about Promises",
Status:    "completed",
},
{
Id:        2,
Title:     "Read about Closures",
Status:    "active",
},
}
func GetGoals(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(goals)
}

但是我不想在控制器代码中使用模型代码。我想把模型保存在models文件夹中。我想把模型和控制器放在不同的文件夹中。我认为我在模型中导入控制器中的模型包或控制器包时做错了什么。我不明白我该怎么做。你们能帮帮我吗?提前谢谢你。

您的go.mod文件看起来如何?我尝试使用以下目录结构与go.mod中的模块条目一起工作代码,看起来像module rishabh96b/go_fiber

➜  go_fiber tree .
.
├── controllers
│   └── mycontroller.go
├── go.mod
├── go.sum
└── models
└── goals.go

在控制器中导入模型包在我的情况下是成功的。以下是mycontroller.go文件的样子

package controllers
import (
. "rishabh96b/go_fiber/models"
"github.com/gofiber/fiber/v2"
)
var goals = []Goal{ //error:undeclared name: Goal
{
Id:     1,
Title:  "Read about Promises",
Status: "completed",
},
{
Id:     2,
Title:  "Read about Closures",
Status: "active",
},
}
func GetGoals(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(goals)
}
func CreateGoal(c *fiber.Ctx) error {
type Request struct {
Title  string `json:"title"`
Status string `json:"status"`
}
var body Request
err := c.BodyParser(&body)
// if error
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"message": "Cannot parse JSON",
"error":   err,
})
}
// create a goal variable
goal := &Goal{ //error:undeclared name: Goal
Id:     len(goals) + 1,
Title:  body.Title,
Status: body.Status,
}
}

p。S:"rishabh96b/go_fiber/models"前面的.意味着我不必在这里使用结构体时使用包名。简而言之,我可以简单地使用Goal{}而不是models.Goal{}

最新更新