Memanggil Fungsi Variadik dengan Refleksi untuk Imbasan SQL
Apabila menggunakan fungsi Rows.Scan() untuk pertanyaan pangkalan data SQL, ia menjadi perlu untuk gunakan refleksi untuk mengambil kira bilangan pembolehubah penunjuk yang diterimanya. Ini membolehkan hirisan mengisi secara dinamik dengan data daripada hasil pertanyaan.
Langkah untuk Mengimbas Secara Dinamik Menggunakan Refleksi
Untuk memanggil fungsi variadik seperti Rows.Scan() menggunakan pantulan , ikuti langkah berikut:
Contoh Kod
Coretan kod berikut menunjukkan cara mengimbas secara dinamik menggunakan pantulan:
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) } } }
Dengan melaksanakan kaedah ini, anda boleh mengisi kepingan secara dinamik dengan hasil pertanyaan tanpa menyatakan jenis data dalam terlebih dahulu.
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Variadic Rows.Scan() Secara Dinamik Menggunakan Reflection in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!