首頁 >後端開發 >Golang >整個sql事務中會預設使用context嗎?

整個sql事務中會預設使用context嗎?

PHPz
PHPz轉載
2024-02-05 22:45:04790瀏覽

整個sql事務中會預設使用context嗎?

問題內容

我想知道如果整個事務會在此處「監聽」該上下文,那麼您是否使用上下文啟動交易?

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除