无法使用 r.GetBooks(func(context * Fiber.Ctx) 类型的值错误)作为 api.Get 参数中的 func(* Fiber.Ctx) 值

问题描述 投票:0回答:1

我尝试使用 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 作为函数的返回。但还是没成功

postgresql go go-gorm
1个回答
0
投票

从你的错误

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
}
© www.soinside.com 2019 - 2024. All rights reserved.