假设我有一个结构:
type User struct {
Name string
Id int
Score int
}
以及具有相同模式的数据库表。将数据库行解析为结构的最简单方法是什么?我在下面添加了一个答案,但我不确定这是最好的答案。
原文由 Kevin Burke 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一个结构:
type User struct {
Name string
Id int
Score int
}
以及具有相同模式的数据库表。将数据库行解析为结构的最简单方法是什么?我在下面添加了一个答案,但我不确定这是最好的答案。
原文由 Kevin Burke 发布,翻译遵循 CC BY-SA 4.0 许可协议
Go 包测试通常会提供有关做事方式的线索。例如,从 database/sql/sql_test.go
,
func TestQuery(t *testing.T) {
/* . . . */
rows, err := db.Query("SELECT|people|age,name|")
if err != nil {
t.Fatalf("Query: %v", err)
}
type row struct {
age int
name string
}
got := []row{}
for rows.Next() {
var r row
err = rows.Scan(&r.age, &r.name)
if err != nil {
t.Fatalf("Scan: %v", err)
}
got = append(got, r)
}
/* . . . */
}
func TestQueryRow(t *testing.T) {
/* . . . */
var name string
var age int
var birthday time.Time
err := db.QueryRow("SELECT|people|age,name|age=?", 3).Scan(&age)
/* . . . */
}
其中,对于您的问题,将一行查询到一个结构中,将转化为如下内容:
var row struct {
age int
name string
}
err = db.QueryRow("SELECT|people|age,name|age=?", 3).Scan(&row.age, &row.name)
我知道这看起来与您的解决方案相似,但展示如何找到解决方案很重要。
原文由 peterSO 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答879 阅读✓ 已解决
这是一种方法 - 只需在
Scan
函数中手动分配所有结构值。