W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
?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)
該示例中執(zhí)行會sleep 10秒中,因此必定會引發(fā)請求的超時。執(zhí)行后,輸出結果為:
context deadline exceeded, SELECT SLEEP(10)
上下文變量也可以傳遞鏈路跟蹤信息,并且可以和日志組件結合,將鏈路信息打印到日志中(僅當?ORM
?日志開啟時)。
模型對象也支持上下文變量的傳遞,同樣也是通過?Ctx
?方法。我們來看一個簡單的示例,我們將示例2的例子通過模型操作調整一下。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
_, err := g.DB().Model("user").Ctx(gctx.New()).All()
if err != nil {
panic(err)
}
}
執(zhí)行后,終端輸出為:
2020-12-28 23:46:56.349 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 5 ms] [default] [rows:0 ] SHOW FULL COLUMNS FROM `user`
2020-12-28 23:46:56.354 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 5 ms] [default] [rows:100] SELECT * FROM `user`
其中?SHOW FULL COLUMNS FROM `user`
?為?ORM
?組件的數(shù)據(jù)表字段獲取查詢,每個表在執(zhí)行操作之前僅會查詢一次并緩存結果到內存中。
嵌套事務的支持依賴?Context
?上下文變量的層級傳遞。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: