为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中结合 row.Scan 和 rows.Scan 接口?

在 go 中结合 row.Scan 和 rows.Scan 接口?

Go
有只小跳蛙 2021-07-14 15:09:23
我对 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
提交
取消
意见反馈 帮助中心 APP下载
官方微信