Dalam Go, pengambilan baris daripada pangkalan data boleh dicapai dengan bantuan sql pakej, sambil memanipulasi baris ini dan menulisnya ke dalam fail seperti CSV boleh dilakukan menggunakan pakej csv. Walau bagaimanapun, satu isu timbul apabila skema jadual tidak diketahui dan perlu ditentukan secara dinamik.
Kaedah Imbasan dalam jenis Rows menjangkakan medan adalah daripada jenis tertentu berdasarkan skema jadual. Tanpa pengetahuan awal tentang skema ini, sukar untuk menentukan bilangan lajur yang wujud dan jenisnya. Ini menimbulkan cabaran apabila cuba membaca lajur menjadi jenis generik seperti []rentetan.
Untuk mengatasi isu ini, hirisan []antara muka{} boleh digunakan untuk menunjuk kepada setiap rentetan dalam []hirisan rentetan. Ini adalah perlu kerana Scan menjangkakan tatasusunan penunjuk kepada pembolehubah destinasi. Coretan kod berikut menunjukkan pendekatan ini:
package main import ( "database/sql" "fmt" "log" ) func main() { // Establish a connection to the database. db, err := sql.Open("mysql", "user:pass@tcp(localhost:3306)/test") if err != nil { log.Fatal(err) } defer db.Close() // Execute the "SELECT *" query. rows, err := db.Query("SELECT * FROM my_table") if err != nil { log.Fatal(err) } defer rows.Close() // Get the column names. cols, err := rows.Columns() if err != nil { log.Fatal(err) } // Create an interface{} slice pointing to each string in the []string slice. var readCols = make([]interface{}, len(cols)) var writeCols = make([]string, len(cols)) for i, _ := range writeCols { readCols[i] = &writeCols[i] } // Iterate over the rows and scan the columns into the string slice. for rows.Next() { if err := rows.Scan(readCols...); err != nil { log.Fatal(err) } fmt.Println(writeCols) } }
Dalam contoh ini, kepingan readCols mengandungi penunjuk kepada setiap elemen dalam kepingan writeCols. Apabila Imbasan dipanggil, nilai dari baris diberikan kepada pembolehubah yang ditunjuk oleh readCols, yang kemudiannya disalin ke dalam kepingan writeCols. Ini membolehkan bacaan dinamik lajur daripada pangkalan data ke dalam kepingan rentetan.
Atas ialah kandungan terperinci Bagaimana untuk Membaca Lajur 'PILIH *' ke dalam rentetan [] dalam Go with Unknown Table Schema?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!