英文:
Function which returns list of struct from gorm database returning nil?
问题
我正在尝试创建一个函数,该函数将以结构体的切片形式输出表中的所有内容。
func FetchAll(parameter interface{}) []interface{} {
var model interface{}
var resultArray []interface{}
db := common.GetDB()
rows, err := db.Model(parameter).Where(parameter).Rows()
if err != nil {
fmt.Print(err.Error())
return nil
}
for rows.Next() {
db.ScanRows(rows, &model)
resultArray = append(resultArray, model)
}
fmt.Println(resultArray)
return resultArray
}
用法:
c.JSON(200, FetchAll(&ProductImage{ProductID: productID}))
但输出结果如下:
[<nil>,<nil>,<nil>]
为什么会这样呢?
英文:
I'm trying to make a function that will output all of the contents from a table as a slice of the struct the table is.
func FetchAll(parameter interface{}) []interface{} {
var model interface{}
var resultArray []interface{}
db := common.GetDB()
rows, err := db.Model(parameter).Where(parameter).Rows()
if err != nil {
fmt.Print(err.Error())
return nil
}
for rows.Next() {
db.ScanRows(rows, &model)
resultArray = append(resultArray, model)
}
fmt.Println(resultArray)
return resultArray
}
Usage:
c.JSON(200, FetchAll(&ProductImage{ProductID: productID}))
But the output is the following:
[<nil>,<nil>,<nil>]
Why is it?
答案1
得分: 1
model
的类型不能是interface{}
你可以使用var model = map[string]interface{}{}
更简单的写法:
func FetchAll(parameter interface{}) []map[string]interface{} {
var resultArray []map[string]interface{}
db := common.GetDB()
err := db.Model(parameter).Where(parameter).Find(&resultArray).Error
if err != nil {
fmt.Print(err)
return nil
}
fmt.Println(resultArray)
return resultArray
}
英文:
the type of model
can't be interface{}
you can use var model = map[string]interface{}{}
Easier to write:
func FetchAll(parameter interface{}) []map[string]interface{} {
var resultArray []map[string]interface{}
db := common.GetDB()
err := db.Model(parameter).Where(parameter).Find(&resultArray).Error
if err != nil {
fmt.Print(err)
return nil
}
fmt.Println(resultArray)
return resultArray
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论