Saya tertanya-tanya sama ada keseluruhan transaksi akan "mendengar" konteks di sini, adakah anda menggunakan konteks untuk memulakan transaksi?
tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) stmt, _ := tx.Prepare("SELECT id, timeout, lang FROM client WHERE id=?")
Atau adakah anda menggunakan konteks secara eksplisit pada setiap pertanyaan?
tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) stmt, _ := tx.PrepareContext(ctx, "SELECT id, timeout, lang FROM client WHERE id=?")
Tidak. Prepare
dan kaedah bebas konteks lain, sila gunakan konteks.Latar Belakang.
Dari Tx.Sediakan dokumentasi...
Lihat kod sumber, ia hanya pembalut mudah.
func (tx *Tx) Prepare(query string) (*Stmt, error) { return tx.PrepareContext(context.Background(), query) }
Walaupun Tx menyimpan konteks daripada db.BeginTx
, ini hanya digunakan untuk transaksi. Ia tidak akan menggunakannya untuk pertanyaan kerana konteks kongsi akan mengelirukan dan menyekat.
Atas ialah kandungan terperinci Adakah konteks akan digunakan secara lalai dalam keseluruhan transaksi sql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!