首頁 > 軟體

協同開發巧用gitignore中介軟體避免網路請求攜帶登入資訊

2022-06-22 14:02:59

協同開發時本地測試

昨天的文章中提到了Go如何優雅的進行本地測試,今天分享一下:在多人協同開發中,如果大家都進行本地測試可能會出現的問題。

最大的問題就是git合併的問題,大家都改這個test檔案,就會導致有衝突。

我們可以通過把test檔案加到.gitignore中來解決這個問題。

比如,我的測試檔案所在目錄是:app/system/script/test.go。 我就在.gitignore中新增:

app/system/script/test.go

這樣我們就不用浪費時間在解決git衝突上了。

GoFrame如何優雅的獲得方法名

今天又發現一個優雅的記錄錯誤紀錄檔的神器:runtime.Caller(0)

我們可以通過這個命令動態獲取對應的方法,從而靈活的記錄錯誤紀錄檔,方便跟蹤定位問題。

範例如下:

shared.ApiLog()中第三個引數就是動態獲取的方法名。

//上下架
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
}

巧用中介軟體

比如在登入之後將登入資訊寫到上下文中,避免每次請求都攜帶登入資訊。

中介軟體在登入之後設定關鍵資訊到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)) // 關鍵點
   signRight, signParam := createSignV2(applicationInfo.Data.SecretKey, parmas, string(bodyBytes))
   if signRight != sign {
      code = code.SignErr("演演算法錯誤")
      return
   }
   r.SetParam("appKey", appKey)
   r.SetParam("appId", applicationInfo.Data.Id)
   r.SetCtxVar(CtxAppID, applicationInfo.Data.Id)
   r.SetCtxVar(CtxChannel, applicationInfo.Data.ChannelId)
   return
}

業務邏輯直接通過context直接取值

通過r.Context().Value()獲取資料:

//校驗請求方許可權
func checkLevel(r *ghttp.Request) (err error) {
   if gconv.Int(r.Context().Value(middileware.CtxChannel)) !=10 {
      err = errors.New("沒有許可權")
      return
   }
   return
}

case when

當需要批次更新資料庫時,case when是個不錯的選擇,我再深入瞭解一下用法,後面單獨出一篇介紹 case when的文章。

總結

這篇文章總結了在協同開發中,可以把我們的偵錯檔案新增到gitignore中,避免和其他同時因為偵錯檔案而衝突,節省解決衝突的時間。

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

巧用中介軟體,避免請求中攜帶登入資訊。

更多關於gitignore避免網路請求攜帶登入資訊的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com