Golang 到底需不需要第三方框架?

只要是入门过 Golang 的同学应该都知道 Golang 原生的 net/http 包功能很强大,通过 http.HandleFunc() 和 http.ListenAndServe()两个函数就可以创建一个简单的 web 服务,示例代码如下:

package main
 
import (
     "fmt""net/http"
 )
 
 funcsayHello(w http.ResponseWriter, r *http.Request) {
     fmt.Fprintf(w, "Hello!")
 }
 
 funcmain() {
     http.HandleFunc("/hello", sayHello)
     http.ListenAndServe(":80", nil)
 }

在网页中输入

http://localhost:80/hello,就可以得到 Hello!的字符串。

理解 HTTP 服务只需要关注两个端-客户端(client)和服务端(server),弄清楚如何接收处理来自 client 的 request,并向 client 返回 response。

接收request的过程中,最重要的是处理路由,即实现一个多路复用器(Multiplexer,作用是根据请求的 URL 找到对应的处理函数(handler)来处理 request 和构建 response )。DefaultServeMux 是 net/http 包提供的 Multiplexer,是 ServeMux 的一个实例。我们也可以根据自己的需求通过实现 ServeMux 来实现一个 Multiplexer。DefaultServeMux 源码如下:

var DefaultServeMux = &defaultServeMux
var defaultServeMux ServeMux

HandleFunc()函数用于为指定的URL注册一个处理器。HandleFunc()处理器函数会在内部调用DefaultServeMux对象对应的方法,其内部实现源码如下:

// HandleFunc registers the handler function for the given pattern// in the DefaultServeMux.// The documentation for ServeMux explains how patterns are matched.funcHandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
     DefaultServeMux.HandleFunc(pattern, handler)
 }

由此看出,我们也可以使用默认多路复用器注册多个处理器,达到与处理器一样的作用。

那么问题来了,既然 net/http 包功能很强大了,那还需要第三方框架吗?

如果是很简单的一个项目,只需要提供几个接口并且业务逻辑也很简单,net/http 包就能满足需求。但平常开发中,大部分场景下,net/http 包的功能满足不了业务场景的需求,例如三方框架提供的如下功能:

路径参数——net/http 支持路径完全匹配和前缀匹配,但不支持路径参数匹配,三方框架一般基于 redix tree 实现路由功能,占用内存更小,查找速度更快。

强大的中间件功能——传入的 HTTP 请求可以由一系列中间件和最终操作来处理。在中间件中实现前置,后置处理逻辑。为框架提供了极大的灵活性和扩展性。

路由组——可以将路由分为不同的组,方便开发维护,可以给每个组配置不同的路径前缀。中间件,更好地组织路由。

参数处理——自动化解析并验证请求参数。

支持请求方式设置——三方框架标配支持 RESTful 风格路由。

生态丰富——主流三方框架生态丰富,很多生态软件都会适配主流框架。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路多辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值