GORM Raw原生查询报错“unsupported destination”该如何解决?

gorm raw原生查询报错“unsupported destination”该如何解决?

gorm raw原生查询 报错unsupported destination

在使用gorm原生查询时,如果出现“unsupported destination, should be slice or struct”错误,原因在于查询的目的地(destination)必须是slice或struct,而查询语句本身的结果与表结构无关。

gorm基于表到结构体的映射来实现逻辑。这意味着,当使用gorm的raw方法查询时,需要提供一个与表结构对应的目的地来接收查询结果。然而,某些查询结果可能无法与特定的表结构相对应,例如查询数据库名称的查询语句“select database()”。

修复方法:

要解决此错误,可以使用go原生sql.db类型的queryrow方法来执行查询,如下所示:

func showCurrentDb() {
    var database string
    persistence.GetDB().DB().QueryRow("select database()").Scan(&database)
    fmt.Println("database ", database)
}

具体原因:

gorm.db类型的raw方法与搜索结构体相关,而搜索结构体是基于表查找的。当找不到与查询结果集对应的表结构时,就会报出不支持的目的地错误。而原生sql.db类型的queryrow方法则不需要表结构的对应关系,因此可以正确处理此类查询。

以上就是GORM Raw原生查询报错“unsupported destination”该如何解决?的详细内容,更多请关注其它相关文章!