Apabila bekerja dengan pangkalan data, adalah perkara biasa untuk menghadapi perhubungan satu-ke-banyak dan banyak-ke-banyak. Dalam senario sedemikian, pemetaan yang cekap dan berskala bagi perhubungan ini kepada struct Go adalah penting.
Satu pendekatan yang berkesan ialah memanfaatkan agregator tatasusunan PostgreSQL dan kefungsian GROUP BY. Ini melibatkan mencipta pandangan yang mengumpulkan item dan data berkaitannya bersama-sama menggunakan pengagregatan tatasusunan. Pandangan yang terhasil kemudiannya boleh disoal, dengan kandungan tatasusunan dinyahmarshalkan ke dalam struct Go.
<br>sql := `<br>BUAT VIEW item_tags AS<br>PILIH<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(senarai tag.*)) AS tag<br>DARI<br> (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT tag.name, tag.id FROM tag WHERE item_id = item.id
) AS taglist
KUMPULAN OLEH
item.id
`
db.MustExec(sql)
Kod Go kemudiannya ialah:
<br>taip struct Item {<br> ID int<br> Teg []Tag<br>}</p> <p>baris, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")<br>untuk baris. Seterusnya() {<br> var item Item<br> var jsonString string<br> if err := rows.Scan(&jsonString); err != nil {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return err
}
if err := json.Unmarshal([]byte(jsonString), &item); err != tiada {
return err
}
item = tambah(item, item)
}
Pendekatan ini menggabungkan fleksibiliti PostgreSQL dengan kecekapan pengagregatan tatasusunan dan marshalling peringkat baris dalam Go. Ia berskala dengan lancar, walaupun dengan perhubungan yang rumit.
Walaupun pendekatan yang disyorkan adalah cekap dan serba boleh, penyelesaian alternatif yang disebut dalam soalan mempunyai kekuatan dan kekuatan tersendiri. kelemahan:
Akhirnya, pendekatan terbaik bergantung pada keperluan khusus aplikasi dan teknologi yang tersedia.
Atas ialah kandungan terperinci Bagaimana untuk Memetakan Hubungan Pangkalan Data Satu-ke-Banyak dan Banyak-ke-Banyak dengan Cekap kepada Structs in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!