当前位置: 首页 > 网络应用技术

杜斯为我做了什么

时间:2023-03-06 21:22:02 网络应用技术

  使用GO实现Web应用程序非常方便。标准库为我们提供了方便的API

  三行代码可以实现基本Web应用程序的功能,那么为什么我们仍然需要像Gin这样的框架呢?

  注册路由时,调用是一种对象的类型,结构如下

  猜测他的近似想法,使用地图存储路由和映射并不困难

  看到这里,我知道为什么他必须保持有序的切片。为了实现模糊,您可以在此切片中获得“最特定”的方式。以“/”结尾,它将不会在此切片中执行,并且无法实现。

  尽管标准库的路由算法简单明了,但它不支持动态路由,并且使用这样的切片作为路由匹配的中等效率不是很高(尽管足够)。

  这里的中间软件是指狭窄的中间件。在每个HTTP请求和响应中,我们始终做一些固定的事情,例如:认证授权,交叉域设置,参数验证等等。我们希望使用中间件来管理这些事情统一,以关注什么当前的接口是在处理程序中进行的。当然,中间有一个路由分布,否则它会太灵活。

  对于Web应用程序,错误会导致服务停止。不可能将错误作为杜松子酒中的中间件恢复。

  以上三点是我们在Web应用程序的开发中无法做的。当然,Gin还做了很多其他事情,例如上下文的封装,模板渲染,常用的API包装等等。)。

  使用杜松子酒后,代码结构几乎没有变化

  可以看出,杜松子酒实际上是一个非常轻的框架。

  路线中的路由算法使用radix树(即前缀树)。前缀树的优势非常明显。

  这是在杜松子酒中添加路由的方法。根据HTTP请求方法的不同(Get,post ...),将杜松子士分为不同的树,并单独管理每个树。

  交配时,根据前缀树匹配它。该作品的源代码将不会显示。基本上,根据常规前缀树算法找到它。每个节点都按照路径进行/分配。同时,添加了一些和平法官以支持动态路线。

  我认为杜松子酒中间件的设计非常聪明。他可能遵循模型

  中间件负责在请求用户的句柄之前做某事。执行用户的句柄之后,请执行一些操作。有一种下一个可以控制以前做什么的方法,以及以后要做什么。

  它等同于管道。循环方向是req-> handlefunc-> resp。中间件是句柄两侧的工人。

  路由组,但该模型有一个大问题。您可以看到所有请求都将通过中间件,但是我们的实际开发需求通常非常复杂。我希望需要对某些接口进行身份验证才能访问。有些不需要它。有些不需要它。然后我们需要路由组。该部分将不会详细介绍。您只需要知道发动机嵌入了路由组,因此发动机具有路由组的所有行为,而RouterGroup还固定了引擎的指针。你也可以知道他的父亲。

  让我们谈谈杜松子酒如何处理中间件

  中间软件也是处理的。基于此图,SO称为的中间件实际上是根据要求和响应进行一些操作,因此他实际上与handingfunc(上下文)没有什么不同。杜松子酒中的中间软件也是句柄类型

  看看中间部分的应用

  非常简单。每个中间件是一个处理程序。访问用户的路由时,请让请求依次通过这些处理程序,到达用户的句柄,然后让响应通过这些中间件以达到上方的上流管线。

  每次请求到来时,它都会为此请求创建上下文,并在此上下文中初始化处理程序数组。在此数组中,该路由组上的所有中部部分,然后在数组中的阵列中进行手匹配的手匹配手匹配,组装了组件!

  Next()之前提到的中间部分需要在请求之前或之后完成,依靠此下一个()

  因此,名称暗示是执行下一个中间件

  了解下一个()之后,我们可以实施您想要的任何中间件

  Abort()此方法用于直接跳过下一个中间件,即将索引放在末尾,并且将不再执行中间软件,例如用于验证用户身份的中间件。可以直接调用此方法。

  错误恢复杜松子酒默认为两个中间件,并在中国应用,这是日志和错误恢复。

  此错误恢复仍然有些复杂。总的来说,我们可以根据此错误恢复对他进行自定义一些功能。实际上,我不需要太多功能。只需打印堆栈信息并返回500个状态代码的响应,然后恢复。

  我查看了官方网站,发现我写的三个方面恰好是他官方网站的前三名...

  当然,他还促进了其他功能,例如JSON的验证(与JSON相关的库太多),模板渲染(基本上不使用),等等。

  本文主要讨论了我在杜松子酒中使用的一些功能,但仅对这些功能进行了介绍。实际上,杜松子酒的核心部分是上下文和引擎的包装。它可能需要研究另一篇文章来撰写文章。

  总的来说,杜松子酒的经验非常好,但是文档很简单,并且不再有详细的参考。幸运的是,源代码非常友好,易于阅读可以很好地阅读(也许这是Go Doc的概念)。

  原始:https://juejin.cn/post/710082461030783863