Heim >Backend-Entwicklung >Golang >Wie kann ich Reflection verwenden, um die Variadic-Funktion „Rows.Scan()' in Go aufzurufen?
Aufrufen der Variadic-Scan-Funktion mithilfe von Reflektion
Um die Rows.Scan()-Funktion mithilfe von Reflektion aufzurufen, können Sie die Leistungsfähigkeit der Reflektion nutzen um eine variable Anzahl von Zeigern an die Funktion zu übergeben. Dies ist besonders nützlich, wenn Sie ein Segment mit Werten aus einem Datenbankabfrageergebnis füllen möchten.
Schritte zur Implementierung
Beispielcode
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]) } }
Dieser Codeausschnitt demonstriert, wie Reflektion verwendet wird, um die Funktion Rows.Scan() mit einer variablen Anzahl von Zeigern aufzurufen. Es ruft die Spaltennamen dynamisch aus dem Abfrageergebnis ab und erstellt Slices zum Speichern der Datenpunkte und Zeiger. Indem Sie Reflektion verwenden, um den Adressausschnitt zu erhalten, können Sie ihn an Zeilen übergeben. Scannen Sie die Datenpunkte und füllen Sie sie entsprechend.
Das obige ist der detaillierte Inhalt vonWie kann ich Reflection verwenden, um die Variadic-Funktion „Rows.Scan()' in Go aufzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!