Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menentukan Status Transaksi pangkalan data/sql Dengan Selamat Tanpa Ralat?

Bagaimanakah Saya Boleh Menentukan Status Transaksi pangkalan data/sql Dengan Selamat Tanpa Ralat?

Barbara Streisand
Lepaskan: 2024-12-12 22:47:18
asal
297 orang telah melayarinya

How Can I Safely Determine the Status of a database/sql Transaction Without Errors?

pangkalan data/sql Tx: Mengesan Status Transaksi

Soalan:

Bagaimana anda boleh menentukan sama ada transaksi menggunakan pangkalan data/sql telah dilakukan atau digulung semula tanpa mencetuskan ralat?

Jawapan:

Untuk mengesan status transaksi, patuhi amalan terbaik berikut:

1. Simpan Transaksi dalam Fungsi:

Pastikan Begin(), Commit(), dan Rollback() dipanggil dalam fungsi yang sama. Ini memastikan transaksi dijejaki dengan lancar.

2. Gunakan Tangguh untuk Penutupan Transaksi:

Sertakan fungsi penangguhan untuk melakukan Rollback jika perlu. Ini menjamin pengendalian transaksi yang betul.

3. Pengendali Transaksi untuk Keringkasan:

Laksanakan fungsi pengendali transaksi untuk merangkum transaksi, memastikan keringkasan dan pengendalian yang betul.

Contoh Kod:

import "database/sql"

func Transact(db *sql.DB, txFunc func(*sql.Tx) error) (err error) {
    tx, err := db.Begin()
    if err != nil {
        return
    }
    defer func() {
        if p := recover(); p != nil {
            tx.Rollback()
            panic(p)
        } else if err != nil {
            tx.Rollback()
        } else {
            err = tx.Commit()
        }
    }()
    err = txFunc(tx)
    return err
}
Salin selepas log masuk

Menggunakan transaksi pengendali:

func (s Service) DoSomething() error {
    return Transact(s.db, func(tx *sql.Tx) error {
        if _, err := tx.Exec(...); err != nil {
            return err
        }
        if _, err := tx.Exec(...); err != nil {
            return err
        }
        return nil
    })
}
Salin selepas log masuk

Mengendalikan Panik:

Gunakan recover() untuk menangkap panik dan memastikan Rollback tepat pada masanya. Buang semula panik untuk membenarkan pengendalian jika ia dijangka.

Objek GC dan Tx:

Menetapkan Tx kepada sifar selepas Commit atau Rollback tidak mengosongkan memori secara automatik . Sebaliknya, bergantung pada pemungut sampah untuk mengendalikan perkara ini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Status Transaksi pangkalan data/sql Dengan Selamat Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan