神刀安全网

Golang 1.6: 数据库操作的2点疑惑

本文是用于Golang 1.6, 2016-5-3版本的 https://github.com/go-sql-driver/mysql

在使用Go进行MySQL操作时,发现两个有些疑惑的问题。

1. DB或者Tx的QueryRow和error问题

DB 或者 Tx 对象的 QueryRow 并不会像其他接口会立即返回 error ,它只会返回一个 *Row 对象,然后通过调用 Row.Scan 才会知道是否有错误。问题就是,调用 Scan 需要准备数据(比如声明一大堆变量或者初始化一个对象),而如果出现错误(没有结果的话也算错误,会返回 sql.ErrNoRows ),这些数据是完全没必要的。

2. 调用Query无法获取行数的问题

调用 DB 或者 Tx 对象的 Query 后返回的 Rows 对象只能通过 Next 来逐步抽取每个结果,无法提前知道 Rows 的长度(不考虑使用SQL中的 COUNT 语句),这样的话收集数据往往需要一直调用 append 来不停地把数据追加到Slice内,当长度大于Slice的Capacity时, append 必然要进行重新的内存分配以及元素的复制操作,如果能提前知道长度当然最好。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Golang 1.6: 数据库操作的2点疑惑

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址