使用反射呼叫可變參數掃描函數
要使用反射呼叫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中文網其他相關文章!