我想知道,如果您在开始一个事务时使用一个上下文,那么整个事务是否会在这里"监听"该上下文?

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 docs...

Prepare在内部使用Conext.Backging;要指定上下文,请使用PrepareContext.

看着the source code,它只是一个简单的包装.

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

虽然TX HAS确实存储了db.BeginTx中的上下文,但它仅用于事务.它不会将其用于查询,因为sharing Contexts leads to confusion and restrictions.

Go相关问答推荐

Golang XML密钥名称冲突

允许在 struct 中使用复合作为函数参数

如何使用GO GIN从Auth0 JWT内标识检索权限

创建服务时云运行触发器执行失败

无法获取RPC描述符

go grpc:无法导入github.com/golang/protobuf/proto(没有所需的模块提供包github.com/gorang/protobuf-proto)

Golang在不写入磁盘的情况下为jpeg图像生成一致的哈希

生成一个 CSV/Excel,在 Golang 中该列的下拉选项中指定值

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

如何将已知类型转换为指向switch 中类型参数的指针?

golang gin 获取 cookie json

自定义 Fyne 自适应网格布局

Go:如何在将 float64 转换为 float32 时判断精度损失

使用 GO 在侧 tar 文件中提取 tar 文件的最快方法

Go:等待多个通道的性能损失

出于某种原因,Golang (Go) AES CBC 密文被填充了 16 个 0x00 字节

退格字符在围棋操场中不起作用

处理程序中的无限循环

Go 赋值涉及到自定义类型的指针

全局记录(across packages)