如何在控制器中导入模型

下面是我的代码的模型。


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)

}

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


慕盖茨4494581
浏览 69回答 1
1回答

森林海

您的文件看起来如何?我试图使用以下目录结构处理您的代码,模块条目看起来像go.modgo.modmodule rishabh96b/go_fiber➜  go_fiber tree ..├── controllers│   └── mycontroller.go├── go.mod├── go.sum└── models    └── goals.go在我的情况下,在控制器中导入模型包是成功的。这是文件的外观mycontroller.gopackage controllersimport (    . "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 Requesterr := c.BodyParser(&body)// if errorif err != nil {    return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{        "message": "Cannot parse JSON",        "error":   err,    })}// create a goal variablegoal := &Goal{ //error:undeclared name: Goal    Id:     len(goals) + 1,    Title:  body.Title,    Status: body.Status,    }}P.S:前面的意味着我不必使用我在这里使用的结构的包名称。简而言之,我可以简单地使用而不是."rishabh96b/go_fiber/models"Goal{}models.Goal{}
打开App,查看更多内容
随时随地看视频慕课网APP