GORM 模型和 Table 函数

GORM Model and Table function

我仍在学习 go 和 gorm,并遵循 gorm 页面本身的教程 (https://gorm.io/docs/advanced_query.html)。据说明,Find 和 First 的结果可以存储在 map[string]interface{} 或 []map[string]interface{} 中。但是,在测试此功能后,它似乎不起作用:

package main

import (
    "fmt"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
)

const (
    dbtech = "sqlite3"
    dbname = "test.db"
)

var db *gorm.DB
var err error

type TestStruct struct {
    Name string
}

func main() {
    db, err = gorm.Open(dbtech, dbname)
    defer db.Close()
    db.AutoMigrate(&TestStruct{})

    db.Create(&TestStruct{Name: "Alice"})
    db.Create(&TestStruct{Name: "Bob"})

    structResults := []TestStruct{}
    db.Find(&structResults)
    fmt.Println(structResults)

    var mapResult map[string]interface{}
    db.Model(&TestStruct{}).First(&mapResult)
    for k, v := range mapResult {
        fmt.Println(k, " - ", v)
    }
    fmt.Println(mapResult)

    var mapResults []map[string]interface{}
    db.Model(&TestStruct{}).Find(&mapResults)
    for k, v := range mapResult {
        fmt.Println(k, " - ", v)
    }
    fmt.Println(mapResult)
}

输出为:

[{Alice} {Bob}]
map[]
map[]

我是不是做错了什么?还是此功能不再可用?

编辑:它不适用于 Model() 和 Table() 函数。

我注意到您正在浏览 Gorm V2 文档,但正在导入 Gorm V1。

您应该将导入更改为:

"gorm.io/gorm"
_ "gorm.io/driver/sqlite"

这将使代码按预期工作。

如果您无法升级 Gorm 版本,则必须将结果存储在结构或结构切片中。