IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Go1.22新特性

Go1.22新特性:增强http.ServerMux路由能力

时间:2024-01-24 17:36:25 来源:IT袋 作者:马勇
导读:Go1.22新特性,小编为你介绍Go1.22新特性的电脑方面的小经验,具体详情如下: Go1.22 有一个比较重要的新特性,那就是基于提案《 net/http: enhanced ServeMux routing 》,增强了 http.ServerMux 的

Go1.22新特性

小编为你介绍Go1.22新特性的电脑方面的小经验,具体详情如下:

Go1.22 有一个比较重要的新特性,那就是基于提案《net/http: enhanced ServeMux routing》,增强了 http.ServerMux 的路由匹配能力,非常值得大家学习和关注。

Go1.22新特性

本次的新特性主要是新增了 HTTP 方法和路径变量的支持。

快速学习

在 Go 中,可以认为几乎所有的路由相关的库都会基于 net/http 或是兼容其 interface。否则容易脱离一个标准路线。

本文的主角 ServeMux,函数签名如下:

type ServeMux
func NewServeMux() *ServeMux
func (mux *ServeMux) Handle(pattern string, handler Handler)
func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request))
func (mux *ServeMux) Handler(r *Request) (h Handler, pattern string)
func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request)

最简单的 Demo 如下:

type apiHandler struct{}
func (apiHandler) ServeHTTP(http.ResponseWriter, *http.Request) {}
func main() {
 mux := http.NewServeMux()
 mux.Handle("/api/", apiHandler{})
 mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
  ...
  fmt.Fprintf(w, "你好,靓仔!)
 })
}

用法非常的简单和标准,就是路径和实现方法。

新提案

缘由

这个提案居然没有显著的说明没有这个的缺陷或问题。说明大家在潜意识里已经是比较认可的,不需要额外解释。

我大胆猜测原因应该是:net/http.ServeMux所提供的路由功能过于的基础了。

因此路由使用上,很多人都不优先推荐使用 net/http,而是更推荐 gorilla/mux 等知名开源库作为基础库,提高实现的效率和产能。

本次新提案将会增加:模式匹配、路径变量的支持。

Go1.22 路由增强

匹配方法

模式匹配将支持以 HTTP 方法开头,后跟空格,如GET /eddycjy或 GETeddycjy.com/中。带有方法的模式仅用于匹配具有该方法的请求。

对照到代码中,也就是 Go1.22 起,http.ServeMux 可以这么写:

mux.HandleFunc("POST /eddycjy/create", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "脑子进煎鱼了!")
})
mux.HandleFunc("GET /eddycjy/update", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "煎鱼进脑子了...")
})
...

通配符

模式匹配将支持{name}{name...},例如:/b/{bucket}/o/{objectname...}

该名称必须是有效的 Go 标识符和符合完整路径元素的标准。它们前面必须有斜杠,后面必须有斜杠或字符串末尾。例如:

相关阅读

  • 广告设计网页有哪些 广告设计与制作的网站推荐

    广告设计网页有哪些 广告设计与制作的网站推荐

    本文为你介绍广告设计网页有哪些和广告设计与制作的网站推荐方面的介绍,一起来看看吧! 如果你是搞设计的,这四个创意设计网站,你应该知道! 最近粉丝让我推荐一些广告设计类网站,

  • Java8 reduce操作详解

    Java8 reduce操作详解

    今日小编为你讲解Java8方面的讲解,具体介绍如下: 什么是reduce Java8 中有两大最为重要的改变,其一是 Lambda 表达式,另一个就是 Stream API 了。 Stream 是 Java8 中处理集合的关键抽象概念,它将

  • JavaWeb:Request和Response

    JavaWeb:Request和Response

    小编为你介绍JavaWeb的IT知识,一起来看看吧! 1、Request和Response的概述 Request是请求对象,Response是响应对象。 request:获取请求数据 浏览器会发送HTTP请求到后台服务器Tomcat HTTP的请求中会包含很

  • 服务器系统有哪些版本 免费虚拟主机服务器推荐

    服务器系统有哪些版本 免费虚拟主机服务器推荐

    小编为你介绍服务器系统有哪些版本和免费虚拟主机服务器推荐方面的讲解,相关内容具体如下: 今天,我们来分享一下什么是服务器及服务器使用什么操作系统? 首先,我们来明确下两个概