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 版本,则必须将结果存储在结构或结构切片中。
我仍在学习 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 版本,则必须将结果存储在结构或结构切片中。