通过反射调用可变参数函数进行 SQL 扫描
使用 Rows.Scan() 函数进行 SQL 数据库查询时,有必要使用反射来考虑它接受的可变数量的指针。这允许使用查询结果中的数据动态填充切片。
使用反射动态扫描的步骤
使用反射调用 Rows.Scan() 等可变参数函数,按照以下步骤操作:
代码示例
以下代码片段演示了如何使用反射动态扫描:
package main import ( "fmt" _ "github.com/lib/pq" "database/sql" ) func main() { db, _ := sql.Open("postgres", "connection_string") rows, _ := db.Query("SELECT * FROM my_table") columns, _ := rows.Columns() count := len(columns) values := make([]interface{}, count) valuePtrs := make([]interface{}, count) for rows.Next() { for i := range columns { valuePtrs[i] = &values[i] } rows.Scan(valuePtrs...) for i, col := range columns { val := values[i] b, ok := val.([]byte) var v interface{} if ok { v = string(b) } else { v = val } fmt.Println(col, v) } } }
通过实现此方法,您可以动态地用查询结果填充切片,而无需提前指定数据类型。
以上是如何在 Go 中使用反射动态调用 Variadic Rows.Scan()?的详细内容。更多信息请关注PHP中文网其他相关文章!