Go 使用db.Query返回多个列
在Go SQL文档中,他们给出了一个只返回1列的查询示例(我认为这是一个糟糕的示例,至少返回2…) 文件说, 扫描将当前行中的列复制到dest指向的值中 这是如何与结构一起工作的,假设我有一个结构Go 使用db.Query返回多个列,go,Go,在Go SQL文档中,他们给出了一个只返回1列的查询示例(我认为这是一个糟糕的示例,至少返回2…) 文件说, 扫描将当前行中的列复制到dest指向的值中 这是如何与结构一起工作的,假设我有一个结构 type User struct{ Name string Age int } 我将查询修改为SELECT name,age from users,其中age=? 如何将*行解压缩到结构中?我确实找到了这个例子,但它不涉及结构。我将遵循活动记录模式约定,这样我的结构将通过snake-
type User struct{
Name string
Age int
}
我将查询修改为SELECT name,age from users,其中age=?
如何将*行解压缩到结构中?我确实找到了这个例子,但它不涉及结构。我将遵循活动记录模式约定,这样我的结构将通过snake-case转换映射到我的数据库。看,复制似乎是通过目标指针上的…
语法完成的:
func (rs *Rows) Scan(dest ...interface{}) error
因此,在您的示例中,您可以执行以下操作:
for rows.Next() {
u := User{} // An empty user
...
if err := rows.Scan(&u.Name, &u.Age); err != nil {
...
}
}
只要您传递了确切数量的指针,无论它们是否来自结构,这都应该有效。看看,复制似乎是用目标指针上的…
语法完成的:
func (rs *Rows) Scan(dest ...interface{}) error
因此,在您的示例中,您可以执行以下操作:
for rows.Next() {
u := User{} // An empty user
...
if err := rows.Scan(&u.Name, &u.Age); err != nil {
...
}
}
只要您传递了确切数量的指针,无论它们是否来自结构,这都应该有效。如果我首先选择了年龄,然后选择了姓名,例如选择了年龄,那么上面的姓名会不会出现问题,即是否顺序?我相信是的。如果要反转查询,则对
err:=convertsign(dest[i],sv)
的调用将失败,row.Scan
方法将返回错误,由于它无法将int
转换为string
,这使得反射无法实现这一点,因为您无法保证模型字段与数据库的列顺序同步(也不是没有学究性和不切实际性的),因此出于效率原因,我认为应该将其设置为尽可能低的级别。没有什么可以阻止你在上面实现一个更为用户友好/灵活的访问(例如,构建一个map[string]接口{}
,或者甚至从你的reflect
ed结构字段中构建查询…)如果我先选择年龄,然后选择姓名,例如选择年龄,那么上面的姓名是否会出现,即它是否有序?我相信是的。如果要反转查询,则对err:=convertsign(dest[i],sv)
的调用将失败,row.Scan
方法将返回错误,由于它无法将int
转换为string
,这使得反射无法实现这一点,因为您无法保证模型字段与数据库的列顺序同步(也不是没有学究性和不切实际性的),因此出于效率原因,我认为应该将其设置为尽可能低的级别。没有任何东西阻止您在其上实现对它的更用户友好/灵活的访问(例如,构建map[string]接口{}
,甚至从reflect
ed结构字段中构建查询…)可能有助于简化此过程。@elithrar谢谢这就是我要找的可能有助于简化此过程。@elithrar谢谢这就是我要找的