最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請(qǐng)求攜帶登錄信息

 更新時(shí)間:2022年06月22日 11:07:16   作者:王中陽(yáng)Go  
這篇文章主要為大家介紹了協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請(qǐng)求攜帶登錄信息

協(xié)同開發(fā)時(shí)本地測(cè)試

昨天的文章中提到了Go如何優(yōu)雅的進(jìn)行本地測(cè)試,今天分享一下:在多人協(xié)同開發(fā)中,如果大家都進(jìn)行本地測(cè)試可能會(huì)出現(xiàn)的問(wèn)題。

最大的問(wèn)題就是git合并的問(wèn)題,大家都改這個(gè)test文件,就會(huì)導(dǎo)致有沖突。

我們可以通過(guò)把test文件加到.gitignore中來(lái)解決這個(gè)問(wèn)題。

比如,我的測(cè)試文件所在目錄是:app/system/script/test.go。 我就在.gitignore中添加:

app/system/script/test.go

這樣我們就不用浪費(fèi)時(shí)間在解決git沖突上了。

GoFrame如何優(yōu)雅的獲得方法名

今天又發(fā)現(xiàn)一個(gè)優(yōu)雅的記錄錯(cuò)誤日志的神器:runtime.Caller(0)

我們可以通過(guò)這個(gè)命令動(dòng)態(tài)獲取對(duì)應(yīng)的方法,從而靈活的記錄錯(cuò)誤日志,方便跟蹤定位問(wèn)題。

示例如下:

shared.ApiLog()中第三個(gè)參數(shù)就是動(dòng)態(tài)獲取的方法名。

//上下架
func (s *goodsService) Shelves(req *goods_unify.DoShelvesReq, r *ghttp.Request) (err error) {
   defer func() {
      if err != nil {
         funcName, _, _, _ := runtime.Caller(0)
         shared.ApiLog(r, "error/client_server_goods", runtime.FuncForPC(funcName).Name(), err.Error())
      }
   }()
   err = service.GoodsUnify.DoShelves(r.Context(), req)
   if err != nil {
      return
   }
   return
}

巧用中間件

比如在登錄之后將登錄信息寫到上下文中,避免每次請(qǐng)求都攜帶登錄信息。

中間件在登錄之后設(shè)置關(guān)鍵信息到context上下文中

package middileware
const (
   CtxAppKey         = "AK"
   CtxAppID          = "app_id"
   CtxChannel        = "channel_id"
)
var Middleware = middlewareShared{}
type middlewareShared struct {
}
func (s *middlewareShared) Sign(r *ghttp.Request) {
   code = checkSignV2(r)
   r.Middleware.Next()
}
func checkSignV2(r *ghttp.Request) (code tools.Code) {
   code, appKey, applicationInfo, sign, parmas := getSignv2Params(r)
   if 1 != code.Code {
      return
   }
   bodyBytes, err := ioutil.ReadAll(r.Request.Body)
   if nil != err {
      code = code.UnKnow()
      return
   }
   r.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // 關(guān)鍵點(diǎn)
   signRight, signParam := createSignV2(applicationInfo.Data.SecretKey, parmas, string(bodyBytes))
   if signRight != sign {
      code = code.SignErr("算法錯(cuò)誤")
      return
   }
   r.SetParam("appKey", appKey)
   r.SetParam("appId", applicationInfo.Data.Id)
   r.SetCtxVar(CtxAppID, applicationInfo.Data.Id)
   r.SetCtxVar(CtxChannel, applicationInfo.Data.ChannelId)
   return
}

業(yè)務(wù)邏輯直接通過(guò)context直接取值

通過(guò)r.Context().Value()獲取數(shù)據(jù):

//校驗(yàn)請(qǐng)求方權(quán)限
func checkLevel(r *ghttp.Request) (err error) {
   if gconv.Int(r.Context().Value(middileware.CtxChannel)) !=10 {
      err = errors.New("沒(méi)有權(quán)限")
      return
   }
   return
}

case when

當(dāng)需要批量更新數(shù)據(jù)庫(kù)時(shí),case when是個(gè)不錯(cuò)的選擇,我再深入了解一下用法,后面單獨(dú)出一篇介紹 case when的文章。

總結(jié)

這篇文章總結(jié)了在協(xié)同開發(fā)中,可以把我們的調(diào)試文件添加到gitignore中,避免和其他同時(shí)因?yàn)檎{(diào)試文件而沖突,節(jié)省解決沖突的時(shí)間。

通過(guò)GoFrame的runtime.Caller(0)獲取方法名。

巧用中間件,避免請(qǐng)求中攜帶登錄信息。

更多關(guān)于gitignore避免網(wǎng)絡(luò)請(qǐng)求攜帶登錄信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go 泛型和非泛型代碼詳解

    Go 泛型和非泛型代碼詳解

    Go 在 1.17 中支持泛型,但是默認(rèn)未開啟;1.18 中會(huì)正式支持泛型,下面文章內(nèi)容小編將給大家講解Go 語(yǔ)言中的泛型和非泛型并且附上代碼詳解,剛興趣的小伙伴請(qǐng)參考下面文章的具體內(nèi)容
    2021-10-10
  • Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼

    Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼

    這篇文章主要介紹了Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 一文帶你掌握Golang中的類型斷言

    一文帶你掌握Golang中的類型斷言

    類型斷言是?Golang?中的一個(gè)非常重要的特性,使用類型斷言可以判斷一個(gè)接口的實(shí)際類型是否是預(yù)期的類型,以便進(jìn)行對(duì)應(yīng)的處理,下面就跟隨小編一起深入了解一下Golang中的類型斷言吧
    2024-01-01
  • golang return省略用法說(shuō)明

    golang return省略用法說(shuō)明

    這篇文章主要介紹了golang return省略用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go構(gòu)建高性能的命令行工具使例詳解

    Go構(gòu)建高性能的命令行工具使例詳解

    這篇文章主要為大家介紹了Go構(gòu)建高性能的命令行工具使例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案

    Go語(yǔ)言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案

    在如今前后端分離開發(fā)的大環(huán)境中,我們需要解決一些登陸,后期身份認(rèn)證以及鑒權(quán)相關(guān)的事情,通常的方案就是采用請(qǐng)求頭攜帶token的方式進(jìn)行實(shí)現(xiàn),本文給大家介紹了Go語(yǔ)言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案,需要的朋友可以參考下
    2024-11-11
  • Go語(yǔ)言中的變量和常量

    Go語(yǔ)言中的變量和常量

    這篇文章介紹了Go語(yǔ)言中的變量和常量,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Go中http超時(shí)問(wèn)題的排查及解決方法

    Go中http超時(shí)問(wèn)題的排查及解決方法

    這篇文章主要介紹了Go中http超時(shí)問(wèn)題的排查及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Golang實(shí)現(xiàn)IO操作

    Golang實(shí)現(xiàn)IO操作

    本文主要介紹了Golang實(shí)現(xiàn)IO操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 詳解Golang 中的并發(fā)限制與超時(shí)控制

    詳解Golang 中的并發(fā)限制與超時(shí)控制

    這篇文章主要介紹了詳解Golang 中的并發(fā)限制與超時(shí)控制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論

封开县| 南通市| 棋牌| 台州市| 许昌县| 北安市| 宜君县| 县级市| 西乌珠穆沁旗| 郎溪县| 东宁县| 永仁县| 剑阁县| 杭州市| 保亭| 郴州市| 广河县| 大新县| 略阳县| 章丘市| 玛纳斯县| 普兰县| 成武县| 武穴市| 博野县| 德格县| 札达县| 会理县| 六枝特区| 观塘区| 调兵山市| 武威市| 泉州市| 毕节市| 台江县| 田东县| 嘉义市| 晋城| 昌黎县| 高雄市| 西昌市|