探索 Go 的 SQL 包中的即席查询
虽然文档表明使用 SQL 包在 Go 中查询数据需要了解列数和编译时类型,这并不严格正确。 sql.Rows 类型为灵活且即席的 SQL 查询提供了解决方案。
动态列元数据检索
sql.Rows 中的 Columns 方法提供了以下列表:结果列名称。这允许您动态确定任意查询返回的列数。
扫描未知数据类型
Scan 方法支持将未知类型的值扫描到任一原始字节切片 (*[]byte) 或 interface{} 值。这使您能够检索列数据,而无需预先定义其类型。
使用即席查询
结合这些技术,您可以执行即席查询并检索数据转换为接口{}值的切片:
<code class="go">columnNames, err := rows.Columns() if err != nil { // Handle error } columns := make([]interface{}, len(columnNames)) columnPointers := make([]interface{}, len(columnNames)) for i := 0; i < len(columnNames); i++ { columnPointers[i] = &columns[i] } if err := rows.Scan(columnPointers...); err != nil { // Handle error }</code>
此后,列切片将包含结果行中所有列的解码值。通过利用 Columns 和 Scan 方法,您可以有效地处理 Go 的 SQL 包中的即席查询。
以上是如何在Go的SQL包中查询未知列类型的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!