Go语言 context是否会在整个sql事务中作为默认值使用?

oxiaedzo  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(91)

我想知道,如果你开始一个具有上下文的事务,整个事务是否会“监听”这个上下文?

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=?")

bq3bfh9z

bq3bfh9z1#

No.Prepare和其他无上下文的方法使用context.Background.
从Tx准备文件...
Prepare在内部使用context.Background;要指定上下文,请使用PrepareContext。
看看the source code,它只是一个简单的 Package 器。

func (tx *Tx) Prepare(query string) (*Stmt, error) {
    return tx.PrepareContext(context.Background(), query)
}

字符串
虽然Tx已经存储了来自db.BeginTx的上下文,但它只用于事务。它不用于查询,因为sharing Contexts leads to confusion and restrictions

相关问题