使用反射调用可变参数扫描函数
要使用反射调用 Rows.Scan() 函数,您可以利用反射的力量将可变数量的指针传递给函数。当您想要用数据库查询结果中的值填充切片时,这特别有用。
实施步骤
示例代码
package main import ( "fmt" "reflect" "database/sql" ) func main() { // Open a database connection. db, _ := sql.Open("postgres", "user=postgres dbname=database password=password") // Query the database. rows, _ := db.Query("SELECT * FROM table_name") // Get the column names. columns, _ := rows.Columns() columnCount := len(columns) // Create slices to store data points and pointers. data := make([]interface{}, columnCount) dataPtrs := make([]interface{}, columnCount) // Obtain a slice of pointers. pointers := reflect.ValueOf(dataPtrs) // Obtain a slice of addresses. addresses := pointers.Addr() // Fill the data points by calling Rows.Scan(). rows.Scan(addresses...) // Print the data points. for i := 0; i < columnCount; i++ { fmt.Println(columns[i], data[i]) } }
此代码片段演示了如何使用反射通过可变数量的指针调用 Rows.Scan() 函数。它动态地从查询结果中检索列名,并创建切片来存储数据点和指针。通过使用反射来获取地址切片,您可以将其传递给rows。扫描并相应地填充数据点。
以上是如何使用反射调用 Go 中的可变参数 `Rows.Scan()` 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!