go语言几个最快最好运用最广的web框架比较(大多数人不了解的特性)(二)
Go中最着名的“Web框架”并不是真正的框架,这意味着:Echo,Gin和Buffalo并不是真正的(功能齐全的)Web框架但Go社区的大多数人都认为他们是。因此他们认为它们与Iris,Beego或Revel相当,因此,我们也有义务将它们纳入此清单。 除了 Beego 和 Revel 之外,所有上述框架都可以适应任何中间件这是为 net/http 创建的,其中一些可以轻松地和其他人一起完成有一些黑客[甚至痛苦是这里的选择]。
词汇
路由:命名路径参数和通配符(Router: Named Path Parameters & Wildcard)
当您可以将处理程序注册到具有动态路径的路由时。
示例命名路径参数:
"/user/{username}" 匹配 "/user/me", "/user/speedwheel" etc
路径参数username 匹配值分别是 me 和 speedwheel 。
示例通配符:
"/user/{path *wildcard}" matches to "/user/some/path/here", "/user/this/is/a/dynamic/multi/level/path" etc
path 路径参数的值分别是some/path/here 和this/is/a/dynamic/multi/level/path 。
Iris也支持一种称为宏的功能,可以描述为/user/{username:string}或/user/{username:int min(1)}。
路由:正则表达式(Router: Regex)
当您可以使用带有过滤器的动态路径向具有过滤器的路径注册处理程序时,应该传递一些处理程序以执行处理程序。
示例:
"/user/{id ^[0-9]$}" matches to "/user/42" but not to "/user/somestring"
id路径参数的值为42。
路由:分组(Router: Grouping)
当您可以将公共逻辑或中间件/处理程序注册到共享相同路径前缀的特定路由组时。
示例:
myGroup := Group("/user", userAuthenticationMiddleware) myGroup.Handle("GET", "/", userHandler) myGroup.Handle("GET", "/profile", userProfileHandler) myGroup.Handle("GET", "/signup", getUserSignupForm)
- /user
- /user/profile
- /user/signup
您甚至可以从组中创建子组:
myGroup.Group("/messages", optionalUserMessagesMiddleware) myGroup.Handle("GET', "/{id}", getMessageByID)
路由:以上所有混合无冲突(Router: All the above Mixed Without Conflict)
这是一个先进但有用的功能,我们许多人希望它由路由器或Web框架支持,目前只有Iris在Go世界中支持这一功能。
这意味着/{path *wildcard} 和/user/{username} 和/user/static 和/user/{path*wildcard} 之类的东西可以在同一个路由器中注册,它可以正确匹配而不会受到静态路径的冲突(/user/static)或通配符(/{path*wildcard})。
路由:自定义HTTP错误(Router: Custom HTTP Errors)
当您可以为“错误”状态代码注册处理程序时。 错误http状态代码是> = 400状态代码,i.s Not Found 404 。
示例:
OnErrorCode(404, myNotFoundHandler)
上面的大多数Web框架仅支持404,405和500注册,但像Iris,Beego和Revel这样的功能完全支持任何状态代码甚至任何错误代码(Iris仅支持任何错误)。
100% compatible with net/http (与net/http 100%兼容)
意味着你有:
- 框架为您提供了直接访问
*http.Request 和http.ResponseWriter 的上下文。
- 一种将
net/http 处理程序转换为特定框架的Handler 类型的方法。
中间件生态系统 (Middleware ecosystem)
当您不必自己用中间件包装每个处理程序时,框架会为您提供一个完整的引擎来定义流,全局或每个路由或每组路由。 i.e Use(middleware), Done(middleware) etc.
类似 Sinatra API (Sinatra-like API)
类似于Sinatra 的APIRegister 在运行时处理程序中用于特定HTTP 方法(和路径参数)的路由。
示例:
.Get or GET("/path", gethandler) .Post or POST("/path", postHandler) .Put or PUT("/path", putHandler) and etc.
服务器:自动HTTPS(Server: Automatic HTTPS)
当框架的服务器支持注册和自动续订SSL 认证以管理SSL/TLS 传入连接(https)时。 最着名的自动https提供程序是letsencrypt。
服务器:正常关机 ( |