*sql.Rows 在开始Next()循环之前,我需要获取长度以获取值.一种方法是通过循环Next()两次,获取计数,然后循环遍历新切片以将值拉出来创建一个行切片,但这似乎效率非常低,所以我希望有更好的方法做这个.
看一下这些文档,我没有看到我可以使用的Count函数或Length函数:https://golang.org/pkg/database/sql/#Rows
看看Go代码,我在结构中看不到任何可以帮助我的东西(虽然我可能会遗漏一些东西,所以会欣赏第二双眼睛):https://github.com/golang/go/ BLOB /主/ src目录/数据库/ SQL/sql.go#L1714
当然有一些方法可以做到这一点,而不仅仅是循环Next()两次?
我知道我也可以做一个单独的计数查询,甚至在我的其他选择中包含一个count(*),但我宁愿避免这种情况.这是一个Go ORM项目,我不想让select语句过于复杂,我宁愿尽可能避免篡改他们的构建请求.
谢谢.
你基本上列出了你的选择。没有隐藏功能可以为您提供行数。
请注意,某些特定于数据库的驱动程序可能支持此功能,但通用接口不支持。
另请注意,如果您打算遍历行并无论如何读取它们,这意味着您不应该担心的开销可以忽略不计。如果行数真的很大,并且查询返回了很多数据,并且您想避免为所有数据分配内存,那么SELECT COUNT(*)事先执行一个查询,以便您知道结果的数量(但要知道,如果有记录,下一个查询可能会发生变化)同时插入或更新)。