Go Web 编程入门:路由
引言
Go 的 net/http
包为 HTTP 协议提供了很多功能。它做得不好的一件事是复杂的请求路由,例如将请求 url 分割成单个参数。
幸运的是,有一个非常流行的包,它在 Go 社区中以良好的代码质量而闻名。在此示例中,您将看到如何使用 gorilla/mux
包创建具有命名参数、GET/POST 处理程序和域限制的路由。
安装
gorilla/mux
包
gorilla/mux
是一个适配 Go 的默认 HTTP 路由器的包。它具有许多功能,可在编写 Web 应用程序时提高生产力。它还符合 Go 的默认请求处理程序签名 func (w http.ResponseWriter, r *http.Request)
,因此该包可以与其他 HTTP 库(如中间件或现有应用程序)混合和加工。使用 go get 命令从 GitHub 安装包,如下所示:
创建新路由
首先创建一个新的请求路由器。路由器是您的 Web 应用程序的主路由器,稍后将作为参数传递给服务器。它将接收所有 HTTP 连接并将其传递给您将在其上注册的请求处理程序。您可以像这样创建一个新路由器:
注册请求处理程序
一旦你有了一个新的路由器,你就可以像往常一样注册请求处理程序。唯一的区别是,不是调用 http.HandleFunc(...)
,而是在路由器上调用 HandleFunc
,如下所示:r.HandleFunc(...)
。
URL 参数
gorilla/mux
路由器的最大优势是能够从请求 URL 中提取段。例如,这是您的应用程序中的 URL:
此 URL 有两个动态段:
书名 slug (go-programming-blueprint)
页 (10)
要让请求处理程序与上面提到的 URL 匹配,您可以使用 URL 模式中的占位符替换动态段,如下所示:
最后一件事是从这些段中获取数据。该包附带函数 mux.Vars(r)
,它以 http.Request
作为参数并返回段的映射。
设置 HTTP 服务器的路由器
有没有想过 http.ListenAndServe(":80", nil)
中的 nil 是什么?它是 HTTP 服务器的主路由器的参数。默认为 nil,表示使用 net/http 包的默认路由器。要使用您自己的路由器,请将 nil 替换为您的路由器 r 的变量。
代码(用于复制/粘贴)
这是完整的代码,您可以使用它来尝试在此示例中学到的东西。
总结
gorilla/mux 路由器的特点。
将请求处理程序限制为特定的 HTTP 方法。
主机名和子域
将请求处理程序限制为特定的主机名或子域。
Schemes
将请求处理程序限制为 http/https。
路径前缀和子路由器
将请求处理程序限制为特定的路径前缀。
版权声明: 本文为 InfoQ 作者【宇宙之一粟】的原创文章。
原文链接:【http://xie.infoq.cn/article/9f85c1d0d30d967eb74f02cd6】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论