gpt4 book ai didi

Go 使用 db.Query 返回多列

转载 作者:IT王子 更新时间:2023-10-29 01:55:51 25 4
gpt4 key购买 nike

在 Go SQL 文档中,他们给出了一个示例 here只返回 1 列的查询(在我看来是个糟糕的例子,至少返回 2...)

age := 27
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var name string
if err := rows.Scan(&name); err != nil {
log.Fatal(err)
}
fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}

文档状态 here那Scan 将当前行中的列复制到 dest 指向的值中。

这如何与结构一起工作,假设我有一个结构

type User struct{
Name string
Age int
}

然后我将查询修改为 SELECT name, age from users where age=?

如何将 *Rows 解压到我的结构中?我确实找到了 this示例,但它没有处理结构。我将遵循 Active Record 模式约定,因此我的结构将通过 snake case 转换映射到我的数据库。

最佳答案

查看the source , 似乎复制是在目标指针上使用 ... 语法完成的:

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 {
...
}
}

只要您传递了准确数量的指针,这应该可以工作,无论它们是否来自结构。

关于Go 使用 db.Query 返回多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com