基本上,在完成查询后,我想获取结果行并生成[]map[string]interface{}
,但我不知道如何使用API来实现这一点,因为Rows.Scan()
函数需要特定数量的参数来匹配所请求的列数(可能还有类型)以正确获取数据。
同样,我想泛化这个调用,并将任何查询转换为[]map[string]interface{}
,其中Map包含Map到该行值的列名。
这可能非常低效,我计划稍后更改结构,以便interface{}
是单个数据点的结构。
我如何使用数据库/sql包来实现这一点,或者如果需要的话,使用数据库/sql/驱动程序包?
5条答案
按热度按时间nvbavucw1#
看看使用sqlx,它可以比标准的数据库/sql库更容易地做到这一点:
很明显,你可以用
[]map[string]interface{}
替换[]Place{}
,但是如果你知道数据库的结构,在可能的情况下,最好使用结构体。您不需要像在interface{}
上那样进行任何类型Assert。pvabu6sv2#
我还没有使用过它,但我相信完成您所要求的(或多或少)的“常见”方法是使用gorp。
vnjpjtjt3#
您可以创建一个结构体来维护Map键到[]interface{}切片的位置。这样,您就不需要创建预定义的结构。例如:
然后,您可以这样使用它:
输出示例:
请参阅下面的完整示例或fieldbinding:
main.go
字段绑定包:
pgx2nnw84#
如果你真的想要一个map,这在某些情况下是需要的,看看dbr,但是你需要使用fork(因为pr在原始repo中被拒绝了)。无论如何,分叉看起来更现代:
https://github.com/mailru/dbr
有关如何使用它的信息:
https://github.com/gocraft/dbr/issues/83
xfb7svmp5#
输出: