Apabila menggunakan Go lang dengan PostgreSQL sebagai pangkalan data, "github.com/lib/pq " pemacu membolehkan sambungan pangkalan data. Walau bagaimanapun, memasukkan data secara manual daripada struct kompleks dengan medan JSON bersarang ke dalam pangkalan data boleh membosankan kerana bilangan medan dan nilai yang banyak.
Nasib baik, github. Perpustakaan com/jmoiron/sqlx menyediakan penyelesaian dengan fungsi NamedExecnya. Fungsi ini membolehkan anda menghantar struct dengan nama medan beranotasi (menggunakan teg db) sebagai parameter bernama, memudahkan proses pemasukan.
Pertimbangkan struct berikut:
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` }</code>
Untuk memasukkan struct ini ke dalam jadual pangkalan data, anda boleh menggunakan kod berikut:
<code class="go">import ( _ "github.com/lib/pq" "github.com/jmoiron/sqlx" "log" ) // Define the database connection. db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable") if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid) VALUES(:leaveid, :empid, :supervisorid)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, leave1) if err != nil { log.Fatalln(err) }</code>
Pendekatan ini memudahkan proses pemasukan dengan ketara, menghapuskan keperluan untuk menentukan setiap medan dan nilai secara manual.
Walaupun perpustakaan sqlx tidak menyokong pemasukan tatasusunan JSON secara langsung, anda boleh menggunakan jenis data jsonb PostgreSQL untuk menyimpan data JSON. Untuk memasukkan tatasusunan JSON ke dalam lajur jsonb, anda boleh menukarnya terlebih dahulu menjadi rentetan dan kemudian gunakan pembina pertanyaan sqlx untuk memasukkannya.
Sebagai contoh, diberikan struct berikut dengan medan tatasusunan JSON:
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` Certificates []CertificateInfo `db:"certificates"` }</code>
Anda boleh memasukkannya ke dalam pangkalan data PostgreSQL menggunakan kod berikut:
<code class="go">// Convert the JSON array to a string. certificatesJSON, err := json.Marshal(leave1.Certificates) if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid, certificates) VALUES(:leaveid, :empid, :supervisorid, :certificates)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, map[string]interface{}{ "leaveid": leave1.LeaveId, "empid": leave1.EmpId, "supervisorid": leave1.SupervisorEmpId, "certificates": string(certificatesJSON), }) if err != nil { log.Fatalln(err) }</code>
Pendekatan ini membolehkan anda memasukkan struct kompleks dengan tatasusunan JSON ke dalam pangkalan data PostgreSQL menggunakan kaedah yang mudah dan cekap.
Atas ialah kandungan terperinci Bagaimana untuk memasukkan struct Go dengan medan JSON bersarang ke dalam pangkalan data PostgreSQL menggunakan sqlx?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!