从gorm数据库返回nil的函数,它返回结构体列表。

huangapple go评论78阅读模式
英文:

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, &amp;model)
		resultArray = append(resultArray, model)
	}
	fmt.Println(resultArray)
	return resultArray
}

Usage:

c.JSON(200, FetchAll(&amp;ProductImage{ProductID: productID}))

But the output is the following:

[&lt;nil&gt;,&lt;nil&gt;,&lt;nil&gt;]

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(&amp;resultArray).Error
    if err != nil {
        fmt.Print(err)
        return nil
    }
    fmt.Println(resultArray)
    return resultArray
}

huangapple
  • 本文由 发表于 2021年8月9日 20:11:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/68711856.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定