Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menggunakan Refleksi untuk Memanggil Fungsi `Rows.Scan()` Variadic?
Apabila beroperasi dengan hasil pangkalan data, mungkin perlu memanggil fungsi Rows.Scan() menggunakan pantulan. Walau bagaimanapun, ini boleh menjadi satu cabaran kerana keperluan fungsi untuk bilangan penunjuk yang berubah-ubah. Dalam artikel ini, kami akan menyelidiki penyelesaian praktikal yang menangani keperluan ini.
Dengan menggunakan refleksi, kami berhasrat untuk mengisi kepingan dengan nilai yang diperoleh daripada pertanyaan pangkalan data. Proses ini melibatkan penentuan bilangan lajur dan memperuntukkan sekeping antara muka kosong untuk memegang titik data. Pendekatan ini memberikan fleksibiliti dalam mengendalikan nilai tanpa pengetahuan awal tentang jenisnya.
Kod Contoh dan Pelaksanaan
Kod berikut menunjukkan pelaksanaan pendekatan ini:
package main import ( "database/sql" "fmt" _ "github.com/lib/pq" ) func main() { db, _ := sql.Open( "postgres", "user=postgres dbname=go_testing password=pass sslmode=disable", ) rows, _ := db.Query("SELECT * FROM _user;") 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) } } }
Kunci Kejayaan
Kunci kepada pendekatan ini terletak pada menggunakan dua kepingan: satu menyimpan nilai dan satu lagi mengandungi penunjuk yang sepadan dengan setiap nilai. Selepas penunjuk digunakan, kepingan nilai diisi dengan data, menyediakan akses kepada titik data sebenar untuk pemprosesan selanjutnya.
Dengan memanfaatkan refleksi, kami memperkasakan kod kami dengan keupayaan untuk mengendalikan nilai yang jenisnya tidak diketahui terlebih dahulu. Fleksibiliti ini meningkatkan fleksibiliti dan kebolehgunaan semula interaksi pangkalan data kami.
Atas ialah kandungan terperinci Bagaimana Menggunakan Refleksi untuk Memanggil Fungsi `Rows.Scan()` Variadic?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!