Echo 是众多 Go Web 框架的一个,根据官网介绍,它有着高性能、可扩展性、极简的特点。echo框架默认其实只包含了MVC框架的C部分,就是负责url路由和控制器部分。至于V视图部分和M数据操作部分可以随意使用自己喜欢的工具库来操作。
1.1 核心模块
(1) Echo Echo 是框架内部的一个结构体,类似于 Beego 的 HttpServer 和 Gin 的 Engine
核心功能:
- 对外暴露路由注册方法,但不负责成为路由树的载体
- 负责服务的生命周期管理,如 Shutdown 和 Start 等
func TestHelloWorld(t *testing.T) {
// Echo instance
e := echo.New()
// Middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// Routes
e.GET("/", hello)
// Start server
e.Logger.Fatal(e.Start(":8084"))
}
// Handle
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
复制代码
在 Echo 里面有两个相似的字段:
- Router:这其实就是代表路由树
- Routers:这代表的是根据 Host 来进行分组组织,可以看做是近似于 namespace 之类的概念,既是一种组织方式,也是一种隔离机制
(2) Router 和 node
- Router 代表的就是路由树,node 代表的是路由树上的节点, 它里面还有一个字段叫做 echo 维护的是使用 Route 的是 echo。这种设计形态在别的地方也能见到,比如说在 sql.Tx 里 面维持了一个 sql.DB 的实例
- node 里面有一个很有意思的设计:staticChildren、paramChild 和 anyChild。利用这种设计可以轻松实现路由优先级和路由冲突检测
(3) Context
这里可能会感到意外,context是接口类型,定义了处理请求和响应的各种方法。 但其实作用和 Beego、Gin、Iris 的 Context 没有什么区别
1.2 总结
优点
- 路由性能高
- 更轻量级的web开发框架
缺点
- 调试不方便,报错信息不友好
- 路由性能虽高,但是路由实现的算法底层不支持路由排序,会引起路由冲突