Pertanyaan Asal:
Dokumentasi Go SQL membayangkan bahawa pengambilan semula data daripada pangkalan data memerlukan pengetahuan statik tentang kiraan lajur dan jenis data. Ini menimbulkan kebimbangan tentang pertanyaan ad hoc dan pengendalian struktur jadual dinamik.
Jawapan:
Walaupun benar bahawa Rows.Scan() memerlukan parameter tetap, sql.Rows type menyediakan kaedah Columns() untuk mendapatkan nama lajur secara dinamik. Selain itu, kaedah Scan() menyokong pilihan berikut:
Penyelesaian:
Dengan menggabungkan keupayaan ini, anda boleh mencipta kod fleksibel yang menyokong pertanyaan ad hoc dan struktur jadual dinamik:
<code class="go">columnNames, err := rows.Columns() if err != nil { // Handle error } columns := make([]interface{}, len(columnNames)) columnPointers := make([]interface{}, len(columnNames)) for i := range columnNames { columnPointers[i] = &columns[i] } if err := rows.Scan(columnPointers...); err != nil { // Handle error } // columns slice now contains decoded column values for the current row</code>
Jika anda mempunyai maklumat jadual tambahan, anda boleh mengoptimumkan logik mengikut keperluan.
Atas ialah kandungan terperinci Bolehkah Pakej SQL Go Mengendalikan Pertanyaan Dinamik dan Struktur Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!