Sedangkan anda boleh menggunakan db.Exec dan db.Query secara bergantian untuk pernyataan SQL yang sama, mereka menghasilkan keputusan yang berbeza. db.Exec mengembalikan bilangan baris yang terjejas (jika disokong oleh pemandu), manakala db.Query mengembalikan objek baris.
Sebagai contoh, untuk mengira bilangan baris yang dipadamkan dalam pernyataan DELETE:
res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now()) numDeleted, err := res.RowsAffected() // Returns the number of deleted rows
Sebagai alternatif (tetapi kurang cekap):
rows, err := db.Query(`DELETE FROM my_table WHERE expires_at = RETURNING *`, time.Now()) numDeleted := 0 for rows.Next() { numDeleted++ } // Iterate over deleted rows
db.Exec juga harus digunakan apabila anda tidak memerlukan hasil pertanyaan, hanya semakan ralat:
if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }
Tuntutan dokumentasi bahawa Go sentiasa menggunakan pernyataan yang disediakan di bawah penutup mungkin tidak betul. Pelaksanaan pemacu nampaknya menentukan sama ada pernyataan baru yang disediakan dibuat untuk setiap panggilan db.Query.
Walau bagaimanapun, memanggil db.Sediakan dan caching db.Stmt yang terhasil boleh meningkatkan prestasi untuk pertanyaan yang kerap dilaksanakan. Rujuk dokumentasi PostgreSQL untuk butiran lanjut: https://www.postgresql.org/docs/current/static/sql-prepare.html
Atas ialah kandungan terperinci Bila dan Mengapa Saya Perlu Menggunakan `db.Exec()` dan Penyata Disediakan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!