我想知道如果整個事務會在此處「監聽」該上下文,那麼您是否使用上下文啟動交易?
tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) stmt, _ := tx.Prepare("SELECT id, timeout, lang FROM client WHERE id=?")
或您是否明確地將上下文應用於每個查詢?
tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) stmt, _ := tx.PrepareContext(ctx, "SELECT id, timeout, lang FROM client WHERE id=?")
#沒有。 Prepare
和其他無上下文方法,請使用 context.Background。
來自 Tx.Prepare 文件...
查看原始碼,它只是一個簡單的包裝器。
func (tx *Tx) Prepare(query string) (*Stmt, error) { return tx.PrepareContext(context.Background(), query) }
雖然 Tx 確實儲存了來自 db.BeginTx
的上下文,但這僅用於交易。它不會將其用於查詢,因為共享上下文會導致混亂和限制。
以上是整個sql事務中會預設使用context嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!