ORM
支持传递自定义的 context
上下文变量,用于异步 IO
控制、上下文信息传递(特别是链路跟踪信息的传递)、以及嵌套事务支持。
我们可以通过 Ctx
方法传递自定义的上下文变量给 ORM
对象, Ctx
方法其实是一个链式操作方法,该上下文传递进去后仅对当前 DB
接口对象有效,方法定义如下:
func Ctx(ctx context.Context) DB
请求超时控制
我们来看一个通过上下文变量控制请求超时时间的示例。
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
_, err := db.Ctx(ctx).Query("SELECT SLEEP(10)")
fmt.Println(err)
该示例中执行会 sleep 10
秒中,因此必定会 引发请求的超时。执行后,输出结果为:
context deadline exceeded, SELECT SLEEP(10)
链路跟踪信息
上下文变量也可以传递链路跟踪信息,并且可以和日志组件结合,将链路信息打印到日志中(仅当 ORM
日志开启时),具体请参考链路跟踪专题介绍章节: 链路跟踪