婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go基于GORM 獲取當前請求所執行的 SQL 信息(思路詳解)

Go基于GORM 獲取當前請求所執行的 SQL 信息(思路詳解)

熱門標簽:宿遷便宜外呼系統代理商 地圖標注免費定制店 重慶慶云企業400電話到哪申請 上海極信防封電銷卡價格 仙桃400電話辦理 寧波語音外呼系統公司 不封卡外呼系統 鄭州智能語音電銷機器人價格 湛江crm外呼系統排名

前言

為了便于精準排查問題,需要將當前的請求信息與當前執行的 SQL 信息設置對應關系記錄下來,記錄的 SQL 信息包括:

  • 執行 SQL 的當前時間;
  • 執行 SQL 的文件地址和行號;
  • 執行 SQL 的花費時長;
  • 執行 SQL 的影響行數;
  • 執行的 SQL 語句;

數據庫組件使用的是GORM

思路

1、在執行 SQL 前,設置開始執行時間(計算執行時長會用到);

2、在執行 SQL 后,第一,獲取當前請求的上下文,為什么獲取上下文,因為需要從上下文中獲取本次請求信息,第二,獲取 SQL 執行前的時間,用來計算執行時長,第三,獲取執行的 SQL 信息,然后將數據設置到Trace中,Trace是項目中鏈路包,后面文章會對其介紹;

上面需要用到GORM兩個 知識點 CallbacksContext,這兩個是在GORM V2才有的,需要 import 的包為gorm.io/gorm

演示代碼

Context的傳遞需要使用GORM V2提供的WithContext()方法。

func (u *userRepo) getUserByID(ctx core.Context, id uint) (*user_model.UserDemo, error) {
 data := new(user_model.UserDemo)
 err := u.db.GetDbR().WithContext(ctx).First(data, id).Error
 if err != nil {
 return nil, errors.Wrap(err, "[user_demo] get user data err")
 }
 return data, nil
}

編寫CallBacks插件代碼,GORM 的 Plugin 接口的編寫非常簡單,只需要實現兩個方法即可。

// Plugin GORM plugin interface
type Plugin interface {
 Name() string
 Initialize(*DB) error
}

下面是我寫的插件代碼:

type TracePlugin struct{}

func (op *TracePlugin) Name() string {
 return "tracePlugin"
}

func (op *TracePlugin) Initialize(db *gorm.DB) (err error) {
 // 開始前
 _ = db.Callback().Create().Before("gorm:before_create").Register(callBackBeforeName, before)
 _ = db.Callback().Query().Before("gorm:query").Register(callBackBeforeName, before)
 _ = db.Callback().Delete().Before("gorm:before_delete").Register(callBackBeforeName, before)
 _ = db.Callback().Update().Before("gorm:setup_reflect_value").Register(callBackBeforeName, before)
 _ = db.Callback().Row().Before("gorm:row").Register(callBackBeforeName, before)
 _ = db.Callback().Raw().Before("gorm:raw").Register(callBackBeforeName, before)

 // 結束后
 _ = db.Callback().Create().After("gorm:after_create").Register(callBackAfterName, after)
 _ = db.Callback().Query().After("gorm:after_query").Register(callBackAfterName, after)
 _ = db.Callback().Delete().After("gorm:after_delete").Register(callBackAfterName, after)
 _ = db.Callback().Update().After("gorm:after_update").Register(callBackAfterName, after)
 _ = db.Callback().Row().After("gorm:row").Register(callBackAfterName, after)
 _ = db.Callback().Raw().After("gorm:raw").Register(callBackAfterName, after)
 return
}

var _ gorm.Plugin = TracePlugin{}

func before(db *gorm.DB) {
 db.InstanceSet(startTime, time.Now())
 return
}

func after(db *gorm.DB) {
 _ctx := db.Statement.Context
 ctx, ok := _ctx.(core.Context)
 if !ok {
 return
 }

 _ts, isExist := db.InstanceGet(startTime)
 if !isExist {
 return
 }

 ts, ok := _ts.(time.Time)
 if !ok {
 return
 }

 sql := db.Dialector.Explain(db.Statement.SQL.String(), db.Statement.Vars...)

 sqlInfo := new(trace.SQL)
 sqlInfo.Timestamp = time_parse.CSTLayoutString()
 sqlInfo.SQL = sql
 sqlInfo.Stack = utils.FileWithLineNum()
 sqlInfo.Rows = db.Statement.RowsAffected
 sqlInfo.CostSeconds = time.Since(ts).Seconds()
 ctx.Trace().AppendSQL(sqlInfo)

 return
}

最后,在 db 連接的時候使用這個插件:

// 使用插件
db.Use(TracePlugin{})

效果

小結

這是編寫的trace包的一部分,這個包可以記錄這些信息(JSON 格式):

  • 支持設置 trace_id
  • 支持設置 request 信息
  • 支持設置 response 信息
  • 支持設置 third_party_requests 三方請求信息
  • 支持設置 debugs 打印調試信息
  • 支持設置 sqls 執行 SQL 信息
  • 可記錄 cost_seconds 執行時長

以上代碼在 go-gin-api 項目中,地址:

github.com/xinliangnote/go-gin-api

到此這篇關于Go基于GORM 獲取當前請求所執行的 SQL 信息的文章就介紹到這了,更多相關Go 獲取當前請求所執行的 SQL 信息內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • gorm update傳入struct對象,零值字段不更新的解決方案
  • gorm操作MySql數據庫的方法
  • Golang 使用gorm添加數據庫排他鎖,for update
  • golang Gorm與數據庫完整性約束詳解
  • golang gorm 結構體的表字段缺省值設置方式
  • golang gorm 計算字段和獲取sum()值的實現
  • gorm FirstOrCreate和受影響的行數實例
  • 解決Go gorm踩過的坑

標簽:西雙版納 電子產品 物業服務 海南 儋州 安康 青海 遼寧

巨人網絡通訊聲明:本文標題《Go基于GORM 獲取當前請求所執行的 SQL 信息(思路詳解)》,本文關鍵詞  基于,GORM,獲取,當前,請求,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go基于GORM 獲取當前請求所執行的 SQL 信息(思路詳解)》相關的同類信息!
  • 本頁收集關于Go基于GORM 獲取當前請求所執行的 SQL 信息(思路詳解)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲伊人色欲综合网| 天堂精品中文字幕在线| 久久99国产精品久久| 香蕉成人伊视频在线观看| 色www精品视频在线观看| youjizz久久| 99久久99久久精品免费观看| 色先锋aa成人| 粉嫩嫩av羞羞动漫久久久| 国产资源在线一区| 国产精华液一区二区三区| 99麻豆久久久国产精品免费优播| 亚洲第一电影网| 美女视频一区在线观看| 成人a级免费电影| 精品久久久久香蕉网| 欧美日韩国产综合一区二区| 色久优优欧美色久优优| 色综合夜色一区| 3d动漫精品啪啪| 欧美一级日韩免费不卡| 日韩精品在线一区二区| 国产精品视频线看| 国产欧美日韩三级| 国产精品视频在线看| 午夜精品久久久久久久久| 日韩电影在线观看网站| 91麻豆精品国产91久久久| 欧美视频中文一区二区三区在线观看| 中文字幕精品一区二区三区精品| 欧美最新大片在线看| 亚洲欧美一区二区视频| kk眼镜猥琐国模调教系列一区二区| 日本一区二区三区dvd视频在线| 成人免费视频caoporn| 26uuu精品一区二区| 精品福利在线导航| 五月天久久比比资源色| 国产日韩欧美高清在线| 91色.com| 久久综合久久久久88| 国产精品久久久久婷婷| 亚洲一区二区四区蜜桃| 日韩久久精品一区| 日本久久电影网| 欧美va亚洲va| 色8久久人人97超碰香蕉987| 成人午夜视频网站| 亚洲精品国产高清久久伦理二区 | 亚洲男人的天堂一区二区| 99久久er热在这里只有精品66| 亚洲欧美日韩国产一区二区三区| 在线欧美一区二区| 国产成人在线观看免费网站| 一区二区三区欧美视频| 久久综合九色综合97_久久久| 国产成人精品影视| 亚洲成人激情综合网| 日本一区二区免费在线| 91精品欧美一区二区三区综合在| 国产成人精品1024| 日韩不卡手机在线v区| 91在线无精精品入口| 久久精品久久久精品美女| 一本色道亚洲精品aⅴ| 老司机精品视频线观看86 | 亚洲综合小说图片| 久久久99久久| 日韩视频在线你懂得| 色综合久久综合中文综合网| 国产一区二区在线观看免费| 亚洲人成网站在线| 国产精品网站在线| 久久欧美一区二区| 欧美一区二区三区在线观看| 欧美日韩视频第一区| av激情综合网| 国v精品久久久网| 99久久伊人网影院| 不卡一二三区首页| 不卡视频免费播放| 成人精品gif动图一区| 波多野结衣欧美| 91美女在线看| 欧美日本精品一区二区三区| 一区二区在线观看视频 | 亚洲国产高清aⅴ视频| 久久综合视频网| 亚洲欧美区自拍先锋| 蜜臀av性久久久久蜜臀aⅴ流畅| 极品少妇一区二区三区精品视频| 色综合天天综合给合国产| 亚洲精品一区在线观看| 又紧又大又爽精品一区二区| 国产精品久久久久久久久久久免费看| 欧美精品一区二区三区蜜桃| 欧美xfplay| 国产精品视频麻豆| 亚洲国产另类av| 粉嫩一区二区三区性色av| 欧美人妖巨大在线| 日韩欧美色电影| 最新中文字幕一区二区三区| 久久69国产一区二区蜜臀| 成人午夜av在线| 日韩一区二区电影网| 亚洲视频小说图片| 国产成人免费视频精品含羞草妖精| 欧美在线制服丝袜| 欧美韩国日本不卡| 国精产品一区一区三区mba视频| 91蜜桃免费观看视频| 中文字幕免费观看一区| 国产在线看一区| 久久久久久久精| 国产乱码精品1区2区3区| 欧美精品乱码久久久久久按摩| 亚洲成年人网站在线观看| 日本电影欧美片| 一区二区三区久久久| 欧美剧情电影在线观看完整版免费励志电影 | 精品国产免费久久| 91色在线porny| 一色屋精品亚洲香蕉网站| 丁香六月综合激情| 欧美精品一卡二卡| 热久久久久久久| 欧美va亚洲va香蕉在线| 激情六月婷婷久久| 日本一区二区三区免费乱视频| 极品少妇xxxx精品少妇| 欧美激情一区二区三区四区| 91麻豆国产福利在线观看| 一区二区三区.www| 欧美电视剧在线观看完整版| 国产成a人亚洲精| 午夜视黄欧洲亚洲| 国产欧美一区二区三区在线老狼| 成人白浆超碰人人人人| 亚洲h动漫在线| 国产精品久久久久一区二区三区| 欧美揉bbbbb揉bbbbb| 国产精品中文字幕欧美| 亚洲人快播电影网| 久久久亚洲高清| 欧美美女激情18p| 一本一道波多野结衣一区二区| 久久精品国产99国产精品| 亚洲欧美偷拍三级| 亚洲精品一区二区三区蜜桃下载| 在线免费av一区| 色婷婷国产精品| 国产精品天美传媒| 成人一区二区视频| 青青草一区二区三区| 亚洲国产精品久久久久婷婷884| 中文字幕不卡一区| 69堂亚洲精品首页| 欧美视频在线观看一区二区| 国产91在线观看| 99久久精品免费看国产免费软件| 国产精品一区二区男女羞羞无遮挡| 狠狠网亚洲精品| 国产成人丝袜美腿| 波波电影院一区二区三区| 91麻豆精品一区二区三区| 欧美日韩国产一二三| 色婷婷综合久久久久中文| 色一区在线观看| 这里只有精品电影| 欧美精品一区二区三区蜜臀| 欧美xxxxx牲另类人与| 欧美xxxxxxxx| 樱花草国产18久久久久| 蜜臀av一区二区| 成人精品在线视频观看| 成人激情综合网站| 欧美一区二区在线免费播放| 国产日韩高清在线| 日韩精品久久理论片| 欧美精品一区二区久久婷婷| 国产精品看片你懂得| 精品一区二区三区在线播放| 91麻豆精品一区二区三区| 久久久无码精品亚洲日韩按摩| 亚洲国产成人av| 在线亚洲精品福利网址导航| 久久午夜老司机| 日韩国产精品久久久| 97成人超碰视| 日韩一区在线免费观看| 国产乱一区二区| 56国语精品自产拍在线观看| 亚洲国产精品综合小说图片区| 91黄视频在线| 亚洲国产成人av网| 欧美日韩情趣电影| 五月天婷婷综合| 欧美成人精品1314www| 国产真实精品久久二三区|