我对 Go 中的特定表有两个查询 - 一个用于检索单个项目,另一个用于返回列表。第一个使用sql.DB.QueryRow是因为它只需要检索一行,第二个用于sql.DB.Query返回几个不同的结果。问题是序列化需要一些工作,我想通过使用从数据库行扫描并将其读入 Go 类型的单一方法来完成它。我的代码现在看起来像:// Some type which varies considerably from its DB representation, and takes some effort to serialize.type Foo struct { Baz *Baz Board [8][8]int}// Get one foo by its idfunc GetFoo(id int) { row := db.QueryRow("select * from foo where id = ?", id) // Work that's duplicated from below... var foo Foo row.Scan(&foo.blah, &foo.etc) // Do more work to serialize the type...}// Get all of the fooesfunc GetFooes() { rows, err := db.Query("select * from foo") for rows.Next() { // Work that's duplicated from above... var foo Foo rows.Scan(&foo.blah, &foo.etc) // Do more work to serialize the type... }}然而,事实证明将 row.Scan 和 rows.Scan 结合起来有点棘手。我以为我可以使用类似的东西:func serializeFoo(scanner sql.Scanner) (*Foo, error) {}尽管 sql.Scanner 需要单个(value interface{})而不是(...value interface{}).这里有什么建议吗?另一种解决方案是将单个QueryRow调用转换为db.Query.
1 回答
- 1 回答
- 0 关注
- 1262 浏览
添加回答
举报
0/150
提交
取消