当前位置: 首页 > wzjs >正文

网站建设一般需要什么软件wordpress内容批量替换

网站建设一般需要什么软件,wordpress内容批量替换,示范专业网站建设,国外网站404错误页当钉钉监测到发生一些事件,如下图 此处举例三个事件user_add_org、user_change_org、user_leave_org,传统的做法是,我们写三个if条件,类似下图 这样字符串匹配效率比较低,于是联想到gin框架中的路由匹配算法&#xff0…

当钉钉监测到发生一些事件,如下图

此处举例三个事件user_add_org、user_change_org、user_leave_org,传统的做法是,我们写三个if条件,类似下图

 这样字符串匹配效率比较低,于是联想到gin框架中的路由匹配算法,可以借鉴模仿gin框架的实现方式。 

用实际需求驱动开发,掌握知识的同时还能应用知识,理解得会更加深入。

gin框架源代码解析

gin框架根据路由字符串建树

无论是POST、还是GET底层都是下方代码

func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) IRoutes {return group.handle(http.MethodPost, relativePath, handlers)
}func (group *RouterGroup) handle(httpMethod, relativePath string, handlers HandlersChain) IRoutes {absolutePath := group.calculateAbsolutePath(relativePath)// 把这个新的handlefunc和之前的handlefunc(比如说中间件中的)加在一起handlers = group.combineHandlers(handlers)// 给这个POST请求去建树group.engine.addRoute(httpMethod, absolutePath, handlers)return group.returnObj()
}func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {assert1(path[0] == '/', "path must begin with '/'")assert1(method != "", "HTTP method can not be empty")assert1(len(handlers) > 0, "there must be at least one handler")debugPrintRoute(method, path, handlers)# 取出POST方法的树root := engine.trees.get(method)if root == nil {root = new(node)root.fullPath = "/"engine.trees = append(engine.trees, methodTree{method: method, root: root})}# 具体去建树root.addRoute(path, handlers)
}

树的节点结构如下:

type node struct {path      stringindices   stringwildChild boolnType     nodeTypepriority  uint32children  []*node // child nodes, at most 1 :param style node at the end of the arrayhandlers  HandlersChain // 此处就是对应路径要执行的HandleFuncfullPath  string
}type HandlersChain []HandlerFunctype HandlerFunc func(*Context)

gin框架在请求到来时具体查树执行逻辑

func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {c := engine.pool.Get().(*Context) // 取出一个context对象c.writermem.reset(w)c.Request = reqc.reset()// 关键处理函数engine.handleHTTPRequest(c)engine.pool.Put(c)
}func (engine *Engine) handleHTTPRequest(c *Context) {httpMethod := c.Request.MethodrPath := c.Request.URL.Pathunescape := falseif engine.UseRawPath && len(c.Request.URL.RawPath) > 0 {rPath = c.Request.URL.RawPathunescape = engine.UnescapePathValues}if engine.RemoveExtraSlash {rPath = cleanPath(rPath)}// Find root of the tree for the given HTTP method// 找到对应请求方法的前缀树t := engine.treesfor i, tl := 0, len(t); i < tl; i++ {if t[i].method != httpMethod {continue}root := t[i].root// Find route in tree// 去前缀树中取值value := root.getValue(rPath, c.params, c.skippedNodes, unescape)if value.params != nil {c.Params = *value.params}if value.handlers != nil {// 找到所有的handlerfuncc.handlers = value.handlersc.fullPath = value.fullPath// 具体去执行handlerfuncc.Next()c.writermem.WriteHeaderNow()return}......}
}func (c *Context) Next() {c.index++for c.index < int8(len(c.handlers)) {c.handlers[c.index](c) // 依次调用handlefunc,让c(context)在不同的func中传递c.index++}
}

钉钉事件回调具体实现

方式一:修改gin框架源代码(不推荐修改源代码)

我们第一步是先来建树,并且绑定对应的方法

第二步的话,就是当有钉钉群聊修改了名称,钉钉会给我们发送请求,会执行以下代码

 

 其中,ServeHTTP是当网络请求过来的时候,我们会执行的方法,下面我新添加的两个方法,是当钉钉事件发生的时候,就会执行,然后找到路由树中对应的方法,即可做出对应的逻辑处理。 

问题:

由于在查找树的时候,修改了gin框架的源代码,所以我们提交代码到仓库里面,其他同事是无法使用的,所以我们需要尽量不修改gin的源代码,也就是说查树的时候,不要修改源代码。

方法二:不修改gin框架源代码

把钉钉的事件注册到gin框架的路由中,在收到钉钉的回调请求之后,再自己给自己发送一个请求,然后就可以了,推荐使用这种方法。

方法三:自己实现前缀树

我们也要给树中的节点上面挂上对应的func,就类似于gin框架中

具体实现后续更新,需要用到context,sync.pool....

参考链接:

​​​​​​事件订阅总览 - 钉钉开放平台

基于 Golang 实现前缀树 Trie

gin框架源码解析 | 李文周的博客


文章转载自:

http://aeWNs2Af.ywpwg.cn
http://SdCCXfpz.ywpwg.cn
http://cIyD8eXu.ywpwg.cn
http://F6cPG6U5.ywpwg.cn
http://xhXfPuvx.ywpwg.cn
http://n3lphoSg.ywpwg.cn
http://YHGUGZxU.ywpwg.cn
http://jkgCtOzI.ywpwg.cn
http://cFr3pndO.ywpwg.cn
http://8L2urwFJ.ywpwg.cn
http://NRV6hAX6.ywpwg.cn
http://XIYTbrKq.ywpwg.cn
http://anoOHiB7.ywpwg.cn
http://VT1jCfZg.ywpwg.cn
http://vSCGTZnz.ywpwg.cn
http://ITWOW7m5.ywpwg.cn
http://huohkS95.ywpwg.cn
http://zh0FUKfx.ywpwg.cn
http://2Y7SGSy0.ywpwg.cn
http://qwmELexX.ywpwg.cn
http://zXsl6JOg.ywpwg.cn
http://KhefiH3Y.ywpwg.cn
http://vEeHSTYg.ywpwg.cn
http://hOS3UJ4s.ywpwg.cn
http://jRIgqLV0.ywpwg.cn
http://w9sMBhKm.ywpwg.cn
http://A7latPXV.ywpwg.cn
http://oSkGQ3WC.ywpwg.cn
http://gZbyHP8h.ywpwg.cn
http://01TAaVSH.ywpwg.cn
http://www.dtcms.com/wzjs/747438.html

相关文章:

  • 联通北京网站备案如何给自己的网站做seo
  • wordpress主题官方网站企业seo
  • 做网页做网站的技术人才宜宾网站建设工作室
  • 电影网站怎么做seo买个网站域名要多少钱一年
  • 淘宝客怎么做自己网站推广微信开发小程序工具
  • 上海网站营销公司thinkphp建站网址
  • dedecms双语网站pytson做网站安全吗
  • WordPress discuz 仿站江阴响应式网站开发
  • 网站解析一般什么时候渠道网站
  • 做网站有没有免费空间分享经济网站怎么建设
  • 做视觉影像网站用什么软件系统免费的网站制作
  • 海口建站平台广州手机建站模板
  • 网站功能描述与分析备案期间怎么做网站
  • 浙江广厦建设职业技术学院网站多用户分销系统一般有哪些
  • 百度收录什么网站wordpress单点登陆
  • 360怎么做网站搜索网站建设的实训报告的实训感受
  • 网上商城网站建设方案网站开发经验总结与教训
  • 百度推广对网站的好处网站域名 文件夹
  • 网站建设培训南宁网站流程
  • 成品网站1688入口wordpress轻量
  • 创建网站收费如何提高alexa排名
  • 深圳精品网站设计洛可可设计公司估值
  • 网站建设对于电子商务的意义中国建设银行电脑版
  • 网站栏目策划方案购物商城排名
  • 帝国cms 孕婴网站模板自己怎么搭建个人博客网站
  • 江西建设网官方网站全国互联网平台
  • 长沙哪些公司做网站帮人做网站推选的公司
  • 网站排版的优点白云区建网站设计
  • 唐山网站制作app泉州seo不到首页不扣费
  • c 网站开发案例源码wordpress小工具变成英文版