Gorm - 不获取数据

Gorm - Not fetching data

我正在尝试使用 Gin 和 Gorm 设置 REST API。以下是我的 main.go:

package main

import (
    "app/config"
    "app/service"
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    // Connect to database
    config.ConnectDatabase()
    r.GET("/books", service.FindBooks)
    // Run the server
    r.Run()
}

在我的 config/setup.go 中,我正在尝试像这样连接到数据库

package config

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

var DB *gorm.DB

// ConnectDatabase : Setup connection to database
func ConnectDatabase() {
    database, err := gorm.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test_db")
    database.SingularTable(true)
    if err != nil {
        panic("Failed to connect to database!")
    }
    DB = database
}

在我的service/book.go中,我有以下逻辑:

package service

import (
    "errors"
    "app/config"
    "app/model"
    "fmt"
    "net/http"
    "github.com/gin-gonic/gin"
)

// FindBooks : Get all books
func FindBooks(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{"data": FindAllBooks()})
}

// FindAllBooks : Fetch all book from DB
func FindAllBooks() []model.Book {
    var book []model.Book
    config.DB.Find(&book)
    for i := 0; i < len(book); i++ {
        fmt.Println(book[i])
    }
    return book
}

而我的model/Book.go定义如下:

package model

type Book struct {
    id        int64  `json:"id" gorm:"primary_key"`
    label     string `json:"label" gorm:"type:varchar(255)"`
}

当我运行应用程序使用go run main.go时,下面是我能看到的日志:

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /books                    --> feedconsumer/service.FindBooks (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
{0   }
[GIN] 2021/03/09 - 12:43:43 | 200 |    2.313864ms |             ::1 | GET      "/books"

基本上,{0 } 意味着实际上没有获取对象。我在这里错过了什么?

我猜你可以像 https://gorm.io/docs/logger.html to be able to see actual db query in those logs. At first glance you are doing everything in the right way as described in https://gorm.io/docs/query.html#Retrieving-all-objects 那样为 GORM 配置记录器 但我个人遇到了一些不可预测的 GORM 行为,这在 doc

中并不明显

GORM 使用 snake_case 定义模型字段。 Link to docs

所以对于你的情况,基本上是:

package model

type Book struct {
    ID        int64  `json:"id" gorm:"primary_key"`
    Label     string `json:"label" gorm:"type:varchar(255)"`
}