繁体   English   中英

在Golang中重用或复制* sql.Rows

[英]Reuse or copy *sql.Rows in Golang

是否可以在调用*sql.Rows.Next()之后重用相同的*sql.Rows ,以便将其传递给另一个函数?

rows, err := db.Query(...)
for rows.Next() {
    // rows.Scan()
}
anotherFunction(rows) // NOT WORKING: This rows became empty.

我试图制作*sql.Rows另一个副本,但是没有用。

rows, err := db.Query(...)
anotherRows := *rows
// PANIC: call of load copies lock value: database/sql.Rows contains sync.RWMutex

在读取行/行之后, database/sql包不提供任何rewind行的方法,即,它是“仅转发”结果集。

而且,它会在内部维护一个与基础(物理)数据库连接的链接,这使复制或传递它成为一个坏主意。

如果需要对数据应用多个功能,只需Scan所有行,以获取数据对象的一部分,然后将其传递即可。

扫描将复制您读取的数据:

扫描将匹配的行中的列复制到dest指向的值中。

这样您就可以安全地Close Rows对象(释放所有关联的数据库资源)。

在执行Query( err )之后并通过rows.Err()读取行之后,您也应该注意错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM