持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
协同开发时本地测试
昨天的文章中提到了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)获取方法名。
巧用中间件,避免请求中携带登录信息。
自己要避免情绪化,也尽量不要让情绪化的人影响到自己。
最后
感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!