Server: Gracefully Shutdown)
按CTRL + C关闭终端应用程序时; 服务器将正常关闭,等待一些连接完成其工作(具有特定的超时)或触发自定义事件以进行清理(即数据库关闭)。
服务器:多监听(Server: Multi Listeners)
当框架的服务器支持注册自定义net.Listener
或使用多个http服务器和地址提供Web应用程序时。
完整的HTTP/2
(Full HTTP/2)
当框架支持带有https
的HTTP/2
和服务器推送功能时。
子域(Subdomains)
当您可以直接从Web应用程序注册每个x,y子域的路由。
这个框架不支持这个功能,但你仍然可以通过启动多个http服务器来实现它,这样做的缺点是主应用程序和子域没有连接,默认情况下不可能在它们之间共享逻辑。
会话(Sessions)
- 支持http会话并准备在特定处理程序中使用时。
- 一些Web框架支持后端数据库来存储会话,因此您可以在服务器重新启动之间获得持久性。Buffalo使用gorilla会话,这些会话比其他实现慢一点。
示例:
func setValue(context http_context){ s := Sessions.New(http_context) s.Set("key", "my value") } func getValue(context http_context){ s := Sessions.New(http_context) myValue := s.Get("key") } func logoutHandler(context http_context){ Sessions.Destroy(http_context) }
Wiki: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session
套接字(WebSockets)
当框架支持websocket通信协议时。 实现是不同的。
您应该搜索他们的示例以查看适合您的内容。 我尝试所有这些的同事告诉我,与其他API相比,Iris使用更简单的API实现了最具特色的webosocket
连接。
Wiki: https://en.wikipedia.org/wiki/WebSocket
视图(aka模板)嵌入到应用程序中
通常,您必须将所有模板文件与Web应用程序的可执行文件并行传输。 嵌入到应用程序意味着框架支持与go-bindata
集成,因此最终的可执行文件包含其中的模板,表示为[]byte
。
什么是视图引擎?
当框架支持模板加载,自定义和构建模板功能时,可以在关键部件上完成。
视图引擎:STD
当框架支持通过标准html/template
解析器加载模板时。
视图引擎:Pug
当框架支持通过Pug
解析器加载模板时。
视图引擎:Django
当框架支持通过Django
解析器加载模板时。
视图引擎:Handlebars
当框架支持通过Handlebars
解析器加载模板时。
视图引擎:Amber
当框架支持通过Amber
解析器加载模板时。
渲染:Markdown,JSON,JSONP,XML(Renderer: Markdown, JSON, JSONP, XML)
当框架的上下文为您提供一种简单的方法来轻松地发送/和自定义各种内容类型的响应。
MVC
模型 - 视图 - 控制器(MVC)是用于在计算机上实现用户界面的软件架构模式。
它将给定的应用程序划分为三个相互关联的部分。
这样做是为了将信息的内部表示与向用户呈现和接受信息的方式分开。
MVC设计模式将这些主要组件分离,从而实现高效的代码重用和并行开发。
- Iris支持完整的MVC功能,可以在运行时注册。
- Beego仅支持方法和模型匹配,可以在运行时注册。
- Revel支持方法,路径和模型匹配,只能通过生成器(必须运行以构建Web应用程序的不同软件)注册。
Wiki: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
高速缓存(Caching)
Web缓存(或HTTP缓存)是用于临时存储(缓存)Web文档(例如HTML页面和图像)的信息技术,以减少服务器滞后。
通过它的Web缓存系统文档; 如果满足某些条件,可以满足后续要求。[1] Web缓存系统可以指设备或计算机程序。
Wiki: https://en.wikipedia.org/wiki/Web_cache
文件服务器(File Server)
当您可以将(物理)目录注册到将自动向客户端提供此目录文件的路由时。
文件服务器:嵌入到应用程序(File Server: Embedded Into App)
通常,您必须传输所有静态文件(如资产; css,java script文件…)以及应用程序的可执行文件。
支持此功能的框架使您有机会将所有这些数据嵌入到应用程序中,表示为[]byte
,它们的响应时间也更快,因为服务器可以直接为它们提供服务,而无需在物理位置查找文件。
响应可以在发送之前的生命周期中多次修改(Response can be Modified Many times through lifecycle before sent)
目前只有Iris通过其http_context中的内置响应编写器支持此功能。
当框架支持此功能时,您可以在发送到客户端之前检索或重置或修改写入的状态代码,正文和标题(在基于net/http
的Web框架中,默认情况下这是不可能的,因为无法检索或更改正文和状态代码 书面)。
Gzip
当你在路由的处理程序中并且你可以更改响应编写器以便使用gzip压缩发送响应时,框架应该处理已发送的头文件,如果发生任何错误,它应该将响应写入恢复正常。
它也应该能够检查客户端是否支持gzip。
gzip是一种文件格式和用于文件压缩和解压缩的软件应用程序
Wiki: https://en.wikipedia.org/wiki/Gzip
测试框架(Testing Framework)
当您可以使用特定的框架库测试HTTP时,它的工作就是帮助您轻松编写更好的测试。
示例(目前,只有Iris支持):
func TestAPI(t *testing.T) { app := myIrisApp() tt := httptest.New(t, app) tt.GET("/admin").WithBasicAuth("name", "pass").Expect(). Status(httptest.StatusOK).Body().Equal("welcome") }
myIrisApp返回你想象中的Web应用程序,它有一个/admin
的GET处理程序,受基本身份验证保护。
上面的简单测试检查/admin是否以状态OK响应,并且使用特定用户名和密码传递身份验证,并且其正文为welcome
。
Typescript Transpiler
Typescript
目标是成为ES6的超集,除了标准定义的所有新东西之外,还将添加一个静态类型系统。
Typescript
还有一个转换器,它将我