Rumah > Artikel > pembangunan bahagian belakang > Mengapakah penangguhan digunakan untuk rollback transaksi dalam interaksi pangkalan data Go?
Semasa menggunakan perkhidmatan Go untuk web melibatkan interaksi pangkalan data, contoh seperti yang disediakan dalam go-database-sql.org dengan berkesan mempamerkan operasi pangkalan data. Walau bagaimanapun, persoalan lazim timbul mengenai tujuan menangguhkan panggilan balik urus niaga.
Menunda pemulangan semula transaksi memastikan ia akan dilaksanakan tanpa mengira aliran kod berikutnya. Ini bermakna walaupun pemulangan awal berlaku, pemulangan semula masih akan berlaku. Walau bagaimanapun, perkara penting yang perlu diambil perhatian ialah panggilan tx.Rollback() pada transaksi yang telah dilakukan tidak mempunyai kesan.
Tingkah laku penangguhan boleh dijelaskan dengan lebih lanjut. Apabila fungsi kembali, sebarang panggilan tertunda akan dilaksanakan dalam susunan terbalik penangguhannya. Ini bermakna tangguh tx.Rollback() akan dilaksanakan sebelum err := tx.Commit().
Dengan menangguhkan rollback, coretan kod mengelakkan keperluan untuk tambahan semakan bersyarat dan memastikan bahawa urus niaga akan ditarik balik sekiranya berlaku sebarang ralat semasa pelaksanaan penyata. Ini memudahkan kod dan memastikan pengurusan keadaan pangkalan data yang betul.
Berdasarkan pemahaman penangguhan, coretan kod yang disediakan boleh diubah suai kepada yang berikut:
tx, err := db.Begin() if err != nil { log.Fatal(err) } defer tx.Rollback() stmt, err := tx.Prepare("INSERT INTO foo VALUES (?)") if err != nil { log.Fatal(err) } defer stmt.Close() for i := 0; i < 10; i++ { _, err = stmt.Exec(i) if err != nil { log.Fatal(err) } } err = tx.Commit() // stmt.Close() runs here!
Pengubahsuaian ini memastikan bahawa kod kekal ringkas sambil mengekalkan tingkah laku yang diingini untuk melaksanakan tx.Rollback() dalam kejadian sebarang ralat semasa pelaksanaan pernyataan.
Atas ialah kandungan terperinci Mengapakah penangguhan digunakan untuk rollback transaksi dalam interaksi pangkalan data Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!