脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 在 Golang 中实现一个简单的Http中间件过程详解

在 Golang 中实现一个简单的Http中间件过程详解

2021-08-17 01:03SpringLeee Golang

本文在go web中简单的实现了中间件的机制,这样带来的好处也是显而易见的,当然社区也有一些成熟的 middleware 组件,包括 Gin 一些Web框架中也包含了 middleware 相关的功能,具体内容详情跟随小编一起看看吧

本文主要针对golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件的形式添加一些功能到管道中,一次请求和响应在管道中的执行过程如下

在 Golang 中实现一个简单的Http中间件过程详解

首先, 我定义了三个测试的中间件 middleware1,2,3 如下

这里中间件的入参和出参的类型都是 http.handler, 然后在 next.servehttp() 的前后分别输出了 in 和 out.

接下来,定义一个 pipeline 的方法,里面使用嵌套的形式, 使用了上面定义的三个测试的中间件.

然后还需要业务代码,这里我定义了 loginhandler 和 registerhandler 两个方法

最后修改程序的 main 函数, 在 login 接口上使用上面添加过中间件的 pipeline

启动程序后,访问 http://localhost:8080/login, 程序的输出如下,这和本文最上面的管道的流程图是一致的,然后访问 register 接口, 控制台没有输出信息,当然也不会执行任何中间件。

在 Golang 中实现一个简单的Http中间件过程详解

现在已经实现了中间件的机制,但是,上面添加中间件是用嵌套的方法,这种方式不能说不太优雅,只能说非常的low,接下来我们需要对管道进行优化

首先定义了一个chain 的struct,用来接收添加到管道中的中间件,在 addmiddlewares() 函数中,接收了多个handle, 然后组装到 chain 对象并返回, 接下来调用 then() 函数, 把管道中的中间件和业务的handler 关联起来。在中间件的使用方式上, 这两种方法都是一样的,只需要调用 pipeline() 方法就行了。

本文在go web中简单的实现了中间件的机制,这样带来的好处也是显而易见的,当然社区也有一些成熟的 middleware 组件,包括 gin 一些web框架中也包含了 middleware 相关的功能, 希望对您有用.

到此这篇关于在 golang 中实现一个简单的http中间件的文章就介绍到这了,更多相关golang http中间件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/myshowtime/p/15071212.html

延伸 · 阅读

精彩推荐
  • Golang深入浅析Go中三个点(...)用法

    深入浅析Go中三个点(...)用法

    这篇文章主要介绍了深入浅析Go中三个点(...)用法,需要的朋友可以参考下...

    踏雪无痕SS6472021-11-17
  • Golanggo语言获取系统盘符的方法

    go语言获取系统盘符的方法

    这篇文章主要介绍了go语言获取系统盘符的方法,涉及Go语言调用winapi获取系统硬件信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    无尽海3862020-04-24
  • GolangGo语言实现自动填写古诗词实例代码

    Go语言实现自动填写古诗词实例代码

    这篇文章主要给大家介绍了关于Go语言实现自动填写古诗词的相关资料,这是最近在项目中遇到的一个需求,文中通过示例代码介绍的非常详细,需要的朋...

    FengY5862020-05-14
  • GolangGO语言字符串处理Strings包的函数使用示例讲解

    GO语言字符串处理Strings包的函数使用示例讲解

    这篇文章主要为大家介绍了GO语言字符串处理Strings包的函数使用示例讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加...

    Jeff的技术栈6882022-04-14
  • GolangGolang 语言极简类型转换库cast的使用详解

    Golang 语言极简类型转换库cast的使用详解

    本文我们通过 cast.ToString() 函数的使用,简单介绍了cast 的使用方法,除此之外,它还支持很多其他类型,在这没有多多介绍,对Golang 类型转换库 cast相关知...

    Golang语言开发栈6112021-12-02
  • GolangGo语言基础单元测试与性能测试示例详解

    Go语言基础单元测试与性能测试示例详解

    这篇文章主要为大家介绍了Go语言基础单元测试与性能测试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步...

    枫少文7812021-12-05
  • GolangGo语言range关键字循环时的坑

    Go语言range关键字循环时的坑

    今天小编就为大家分享一篇关于Go语言range关键字循环时的坑,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    benben_20154202020-05-23
  • GolangGolang实现四种负载均衡的算法(随机,轮询等)

    Golang实现四种负载均衡的算法(随机,轮询等)

    本文介绍了示例介绍了Golang 负载均衡的四种实现,主要包括了随机,轮询,加权轮询负载,一致性hash,感兴趣的小伙伴们可以参考一下...

    Gundy_8442021-08-09