成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)

Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)

熱門標(biāo)簽:宿遷便宜外呼系統(tǒng)代理商 地圖標(biāo)注免費(fèi)定制店 重慶慶云企業(yè)400電話到哪申請(qǐng) 上海極信防封電銷卡價(jià)格 仙桃400電話辦理 寧波語(yǔ)音外呼系統(tǒng)公司 不封卡外呼系統(tǒng) 鄭州智能語(yǔ)音電銷機(jī)器人價(jià)格 湛江crm外呼系統(tǒng)排名

前言

為了便于精準(zhǔn)排查問(wèn)題,需要將當(dāng)前的請(qǐng)求信息與當(dāng)前執(zhí)行的 SQL 信息設(shè)置對(duì)應(yīng)關(guān)系記錄下來(lái),記錄的 SQL 信息包括:

  • 執(zhí)行 SQL 的當(dāng)前時(shí)間;
  • 執(zhí)行 SQL 的文件地址和行號(hào);
  • 執(zhí)行 SQL 的花費(fèi)時(shí)長(zhǎng);
  • 執(zhí)行 SQL 的影響行數(shù);
  • 執(zhí)行的 SQL 語(yǔ)句;

數(shù)據(jù)庫(kù)組件使用的是GORM。

思路

1、在執(zhí)行 SQL 前,設(shè)置開始執(zhí)行時(shí)間(計(jì)算執(zhí)行時(shí)長(zhǎng)會(huì)用到);

2、在執(zhí)行 SQL 后,第一,獲取當(dāng)前請(qǐng)求的上下文,為什么獲取上下文,因?yàn)樾枰獜纳舷挛闹蝎@取本次請(qǐng)求信息,第二,獲取 SQL 執(zhí)行前的時(shí)間,用來(lái)計(jì)算執(zhí)行時(shí)長(zhǎng),第三,獲取執(zhí)行的 SQL 信息,然后將數(shù)據(jù)設(shè)置到Trace中,Trace是項(xiàng)目中鏈路包,后面文章會(huì)對(duì)其介紹;

上面需要用到GORM兩個(gè) 知識(shí)點(diǎn) CallbacksContext,這兩個(gè)是在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 接口的編寫非常簡(jiǎn)單,只需要實(shí)現(xiàn)兩個(gè)方法即可。

// 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)

 // 結(jié)束后
 _ = 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 連接的時(shí)候使用這個(gè)插件:

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

效果

小結(jié)

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

  • 支持設(shè)置 trace_id
  • 支持設(shè)置 request 信息
  • 支持設(shè)置 response 信息
  • 支持設(shè)置 third_party_requests 三方請(qǐng)求信息
  • 支持設(shè)置 debugs 打印調(diào)試信息
  • 支持設(shè)置 sqls 執(zhí)行 SQL 信息
  • 可記錄 cost_seconds 執(zhí)行時(shí)長(zhǎng)

以上代碼在 go-gin-api 項(xiàng)目中,地址:

github.com/xinliangnote/go-gin-api

到此這篇關(guān)于Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息的文章就介紹到這了,更多相關(guān)Go 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

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

標(biāo)簽:西雙版納 電子產(chǎn)品 物業(yè)服務(wù) 海南 儋州 安康 青海 遼寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)》,本文關(guān)鍵詞  基于,GORM,獲取,當(dāng)前,請(qǐng)求,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲av片不卡无码久久| 久草视频中文在线| 欧美 亚洲 另类 激情 另类| 欧美zozozo| 国产美女精品写真福利视频| 日本熟妇乱子伦xxxx| 日韩三级电影视频| 凹凸成人在线| 99在线精品视频免费观看软件| 57pao成人永久免费| 欧美乱偷一区二区三区在线| 久久午夜精品| 国产日韩精品一区观看| 国产在线视频你懂得| 老司机精品免费视频| 欧美日韩国产精品综合| 国产精品乱码一区二区三区软件| 国产精品久久久久久久久妇女| 国产精品午夜在线观看| 国产精品一区久久久久| 中文字幕一区二区免费| 蜜臀av一区二区三区有限公司| 欧美日本一区| 国外成人在线视频| 欧美成人高清| 九一免费在线观看| bl视频在线免费观看| 91精品91久久久中77777老牛| 欧美午夜激情视频| 日韩大片在线观看视频| 9l视频自拍9l视频自拍| 欧美成人三级伦在线观看| 欧美大片一区二区三区| 欧美视频一区二区| 最新av电影| 成人欧美精品一区二区| 在线观看的黄色网址| 黄色动漫在线观看| 久久精品99久久无色码中文字幕| 久久久一区二区三区四区| 天天干天天爽天天操| 四虎永久精品在线| 天堂√在线观看一区二区| 久久久久久免费毛片精品| 日韩精品一级二级| 国产1区2区3区| 人妻丰满熟妇av无码区app| 免费欧美在线视频| 日韩高清欧美激情| 色先锋av影音| 久久综合桃花网| 中文字幕人成乱码在线观看| 日韩欧美高清视频| 免费在线看一区| 日韩av毛片在线观看| 天堂久久av| 麻豆精品在线播放| 久久久久久久久久久久久久av| 亚洲国产婷婷香蕉久久久久久99| 伊人精品久久久久7777| zzzwww在线看片免费| 日本精品专区| 你懂的网站在线观看| 亚洲成人一区二区在线观看| aaawww| 日本在线成人| 交视频在线观看国产| 视频一区亚洲| 亚洲图片欧美色图| 青春草在线观看视频| 欧洲一级黄色片| а√天堂中文在线资源bt在线| 丝袜国产日韩另类美女| 久久久久日韩精品久久久男男| 国产精品igao视频网网址不卡日韩| 在线观看免费成人av| 欧美一区三区三区高中清蜜桃| 亚洲欧美激情四射在线日| 久久久综合色| 美女999久久久精品视频| 欧美精品久久久久久久免费观看| 超碰caoporn久久| 亚洲字幕av一区二区三区四区| eeuss影院18www免费| 欧美三级电影在线观看| 玖玖在线精品| 精品国产区一区二| 91嫩草香蕉| 黄页网站在线| 成年人视频在线看| 在线免费看av的网站| 韩国三级在线看| 亚洲一二三区不卡| 亚洲精品高清在线观看| 国产精品久久久久久久久久久久久久久久久| 久热re国产手机在线观看| 91精品国产自产在线| 天天操天天操天天操天天操天天操| 久久资源综合| av电影网站在线观看| 国内一区在线| 性欧美videos精品| 亚洲老板91色精品久久| 国产精品人成在线观看免费| 一区二区三区黄色| 91精品国产一区二区在线观看| 2020国产精品久久精品美国| 日本www在线视频| 亚洲电影中文字幕在线观看| 香蕉av在线播放| 国精产品久拍自产在线网站| 国产一二三区在线视频| 91国产视频在线| 国产成人免费在线观看视频| 中文字幕一区二区三区av| 成人深夜在线观看| 91在线直播亚洲| 色综合久久久无码中文字幕波多| 激情自拍一区| 精品调教chinesegay| 新片速递亚洲合集欧美合集| 一插菊花综合| 国产成人在线免费观看| 自拍偷拍亚洲视频| 天天操天天干天天插| 色综合久久88色综合天天看泰| 最新国产麻豆精品| 色婷婷综合网| 免费又爽又黄禁片视频1000片| 免费一级黄色录像| 国产精品电影久久久久电影网| 久久精品一区二区免费播放| 99九九精品视频| 成年免费视频黄网站在线观看| 国产一区在线视频观看| 9自拍视频在线观看| 亚洲综合网av| 国产精品扒开腿做爽爽爽男男| 一区在线不卡| 欧美日韩亚洲一区二区三区| 日本欧美韩国一区三区| 久久动漫网址| 99riav国产| 99视频网站| 欧美精品一区二区三| 欧美高跟鞋交xxxxhd| 国产精品久久国产愉拍| 影音国产精品| 一个人看的www视频在线免费观看| 亚洲欧洲久久久| 黄色成人在线网站| 国产精品毛片一区视频播| 97国产成人精品视频| 欧美激情视频一区二区三区免费| 亚洲午夜国产成人av电影男同| 九一精品久久久| 久久综合中文色婷婷| 国产视频手机在线观看| 亚洲国产精品t66y| 欧美人动性xxxxz0oz| 日本黄色三级网站| 亚洲国产精品小视频| www.com污| 美国十次了思思久久精品导航| 久久久精品午夜少妇| 看全色黄大色黄大片免责看的| 精品国产伦一区二区三区| 精品久久久久久久久久ntr影视| 亚洲AV成人无码网站天堂久久| 精品福利免费观看| 一本色道久久亚洲综合精品蜜桃| 影视先锋av资源站| 日韩最新中文字幕电影免费看| 国产伦精品一区二区三区精品视频| 欧美性大战久久久久久久蜜臀| 伊人久久五月天| 日韩视频免费在线观看| 国产精品免费在线| 亚洲精品视频导航| 日韩av网站在线| 欧美激情久久久久久| 国产一级片久久| 国产电影一区二区三区| 国产特黄级aaaaa片免| 欧美日韩在线高清| 欧美美乳在线| 777亚洲妇女| 国产精品久久久久久久久久精爆| 国产成人精品一区二区在线| 欧美黄片一区二区三区| 老司机2019福利精品视频导航| www在线免费观看| 五月天色综合| 任我爽在线视频精品一| 国产成人一区二区精品非洲| 欧美精品在线观看一区二区| 亚洲一区不卡在线| 国模极品一区二区三区| 亚洲精品国产精品乱码不99按摩| 日本久久精品电影| 好吊操视频这里只有精品| 国产一区二区三区在线观看| 国产在线激情| 欧美日本网站| 精品美女一区二区三区| 日本高清不卡在线| 探花国产精品| 粉嫩av国产一区二区三区| 婷婷五月精品中文字幕| a毛片在线免费观看| 成人在线观看网址| 成人国产电影在线观看| 久久最新免费视频| 鲁丝一区二区三区免费| 91视频国产精品| 国语自产精品视频在线看抢先版结局| 51社区在线成人免费视频| 日韩美女一区二区三区四区| 69日本xxxxxxxxx49| 国产福利91精品一区二区三区| 五月天精品在线| 高清不卡亚洲| 亚洲国产美女久久久久| 久久久久久久性| 欧美黄色性生活| 亚洲欧美日韩精品| 老司机精品影院| 欧美视频精品在线观看| 国产精品爱久久久久久久小说| 中文天堂在线播放| 正在播放亚洲| 一个人看的免费网站www视频| 久久久久久久久综合| 欧美日韩一区二区三区69堂| 久久99国产精一区二区三区| 欧美日本三区| 欧美性高跟鞋xxxxhd| 国产精品久久久久av蜜臀| 99精品久久久久久中文字幕| 欧美黑人性受xxxx精品| 欧美成人精品在线观看| 麻豆免费精品视频| 黄网站在线播放| 日本韩国欧美中文字幕| 一区二区三区四区五区视频在线观看| av成人毛片| 欧美成免费一区二区视频| 国产精品jizz在线观看麻豆| 久草在线免费福利资源| 亚洲天堂黄色| 欧美一区二区三区白人| 天天影视色香欲综合| 怡红院一区二区| 欧洲vodafonewi精品| 亚洲欧美不卡| 欧美美乳在线| 国产精品羞羞答答在线| 天天射天天拍| 亚洲视频在线一区观看| 日韩免费观看av| 996久久国产精品线观看| 国产日韩第一页| 精品无码av无码免费专区| www.久久com| 久久久久久久久久99| 成人h动漫在线| 国产极品在线视频| 欧美卡一卡二卡三| 中国人体摄影一区二区三区| 91精品啪在线观看国产81旧版| 免费在线观看成年人视频| 亚洲缚视频在线观看| 国产精品女人久久久久久| 欧美另类极品videosbest视| 亚洲中文字幕无码中文字| 亚洲精品免费播放| 国产精品区一区二区三| 欧美视频在线观看网站| 亚洲欧美另类在线观看| 自拍亚洲国产| 婷婷中文字幕一区三区| 久久久999久久久| 日韩视频中文字幕在线观看| 西野翔中文久久精品字幕| 欧美韩国日本一区| 俄罗斯毛片基地| 中文精品电影| 精品一区二区不卡| 999国内精品视频在线| 欧美亚洲综合色| 性做久久久久久免费观看欧美| 先锋影音av资源网| 免费在线亚洲欧美| 亚洲最新视频在线播放| 成人av男人的天堂| 亚洲激情一区二区三区| 成人c视频免费高清在线观看| 日韩av中文在线| 亚洲一卡二卡三卡四卡五卡| 精精国产xxxx视频在线野外| 宅男网站在线免费观看| 伊人久久大香线蕉| 黄色成人91| 女性裸体视频网站| 欧在线一二三四区| 国产欧美一区二区三区在线老狼| 欧美日韩一区免费| 一区二区三区国产好的精华液| 波多野结衣一二区| 久久综合五月天婷婷伊人| 国产精品久久久久久久蜜臀| 欧美肥婆xxxx欧美另类| 激情一区二区三区| 欧美酷刑日本凌虐凌虐| 无码人妻精品一区二区三区99v| 日本不卡免费高清视频| 国产午夜激情视频| 中文字幕一区二区三区有限公司| 欧美在线亚洲一区| 一级片在线观看免费| 久久久久在线| 色吊丝一区二区| 欧美日韩小视频| 午夜一级在线看亚洲| 亚洲va久久久噜噜噜久久狠狠| 一区二区三区在线| 曰批又黄又爽免费视频| 三级成人黄色影院|