我尝试使用 gorm 框架使用 golang 和 postgres 制作 API。我收到错误消息
cannot use r.GetBooks (value of type func(context *fiber.Ctx) error) as func(*fiber.Ctx) value in argument to api.Get
这是我的代码:
import (
"fmt"
"log"
"os"
"net/http"
"github.com/gofiber/fiber"
"github.com/joho/godotenv"
"gorm.io/gorm"
)
func (r *Repository) GetBooks(context *fiber.Ctx) error {
bookModels := &[]models.Books{}
err := r.DB.Find(bookModels).Error
if err != nil {
context.Status(http.StatusBadRequest).JSON(
&fiber.Map{"message": "Failed to get the book"})
return err
}
context.Status(http.StatusOK).JSON(
&fiber.Map{
"message": "Books fetched successfully",
"data": bookModels,
})
return nil
}
func (r *Repository) SetupRoutes(app *fiber.App){
api := app.Group("/api")
api.Get("/books", r.GetBooks)
}
我已经在函数末尾返回 nil 并使用 error 作为函数的返回。但还是没成功
从你的错误
cannot use r.GetBooks (value of type func(context *fiber.Ctx) error) as func(*fiber.Ctx) value in argument to api.Get
期待什么
func(*fiber.Ctx)
你所给予的
func(*fiber.Ctx) error
当你的函数返回错误时,它期望一个没有返回类型的函数
您需要修改 GetBooks 函数以不返回任何内容
func (r *Repository) GetBooks(context *fiber.Ctx) {
bookModels := &[]models.Books{}
err := r.DB.Find(bookModels).Error
if err != nil {
context.Status(http.StatusBadRequest).JSON(
&fiber.Map{"message": "Failed to get the book"})
return
}
context.Status(http.StatusOK).JSON(
&fiber.Map{
"message": "Books fetched successfully",
"data": bookModels,
})
return
}