Aufrufen variadischer Funktionen mit Reflection für den SQL-Scan
Bei Verwendung der Rows.Scan()-Funktion für SQL-Datenbankabfragen ist dies erforderlich Verwenden Sie Reflektion, um die variable Anzahl der akzeptierten Zeiger zu berücksichtigen. Dies ermöglicht das dynamische Auffüllen von Slices mit Daten aus einem Abfrageergebnis.
Schritte zum dynamischen Scannen mithilfe von Reflection
Um eine variadische Funktion wie Rows.Scan() mithilfe von Reflection aufzurufen , folgen Sie diesen Schritten:
Codebeispiel
Der folgende Codeausschnitt zeigt, wie mithilfe von Reflektion dynamisch gescannt wird:
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) } } }
Durch die Implementierung dieser Methode können Sie Slices dynamisch mit Abfrageergebnissen füllen, ohne die Datentypen im Voraus anzugeben.
Das obige ist der detaillierte Inhalt vonWie rufe ich Variadic Rows.Scan() mithilfe von Reflection in Go dynamisch auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!