原始查询:
Go SQL 文档暗示检索数据库中的数据需要列数和数据类型的静态知识。这引起了对即席查询和处理动态表结构的担忧。
答案:
虽然 Rows.Scan() 确实需要固定参数,但 sql.Rows type 提供了 Columns() 方法来动态获取列名。此外,Scan() 方法支持以下选项:
解决方案:
通过组合这些功能,您可以创建支持即席查询和动态表结构的灵活代码:
<code class="go">columnNames, err := rows.Columns() if err != nil { // Handle error } columns := make([]interface{}, len(columnNames)) columnPointers := make([]interface{}, len(columnNames)) for i := range columnNames { columnPointers[i] = &columns[i] } if err := rows.Scan(columnPointers...); err != nil { // Handle error } // columns slice now contains decoded column values for the current row</code>
如果有额外的表信息,可以根据需要优化逻辑。
以上是Go 的 SQL 包可以处理动态查询和表结构吗?的详细内容。更多信息请关注PHP中文网其他相关文章!