Bekerja dengan pangkalan data hubungan seperti PostgreSQL menggunakan Golang selalunya melibatkan pengambilan nilai agregat. Dalam kes ini, mengira jumlah lajur, seperti lajur gaji, adalah tugas biasa.
Kod yang disediakan cuba mengira jumlah lajur gaji daripada jadual 'orang' tetapi menghadapi ralat. Ia menggunakan penyataan SELECT dengan SUM(gaji) untuk mendapatkan semula keputusan dan mengikat nilai kepada struct NewPerson. Walau bagaimanapun, pendekatan ini tidak betul kerana NewPerson tidak mempunyai medan gaji dan pertanyaan sedang cuba untuk memetakan keputusan terus ke struct.
Untuk menyelesaikan isu ini, pendekatan berbeza diperlukan. Golang menyediakan fungsi Imbasan, yang membolehkan pembangun mendapatkan semula hasil pertanyaan dan memetakannya kepada struktur data tersuai. Berikut ialah versi semakan kod yang menggunakan Imbasan:
<code class="go">type NResult struct { Salary int64 // or int, depending on the data type } func GetSalarySum(c echo.Context) error { db, err := gorm.Open("postgres", "...") checkError(err) defer db.Close() query := "SELECT SUM(salary) FROM people" var result NResult if err := db.Table("people").Raw(query).Scan(&result).Error; err != nil { fmt.Println("error->", err) } return c.JSON(http.StatusOK, result) }</code>
Dalam kod ini, kami mentakrifkan NRresult struktur tersuai dengan medan Gaji tunggal jenis int64 atau int, bergantung pada jenis data lajur gaji . Kami menggunakan kaedah Raw untuk melaksanakan SELECT SUM(gaji) FROM pertanyaan orang secara langsung, dan fungsi Scan untuk mendapatkan semula keputusan dan memetakannya ke NRresult struct.
Kod yang disemak ini mengambil semula jumlah gaji dengan betul lajur dan mengembalikannya sebagai respons JSON.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Lajur Menggunakan GORM dan Imbas di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!