[英]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.