回声嘹亮 之 Go 的 Echo 框架 —— 上手初体验

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Echo 是众多 Go Web 框架的一个,根据官网介绍,它有着高性能、可扩展性、极简的特点。

Echo 介绍

Echo 是众多 Go Web 框架的一个,根据官网介绍,它有着高性能、可扩展性、极简的特点。


image.png


Echo 的特点概述:


  • 优化的 HTTP 路由,可智能地优先路由
  • 方便构建强大且可扩展的 RESTful API
  • API 组
  • 可扩展的中间件框架,在多个级别定义中间件(root, group, route)
  • 为 JSON ,  XML 进行表单数据负载绑定
  • 发送各种 HTTP 响应的便捷功能
  • 集中式 HTTP 错误处理
  • 使用任何模板引擎进行模板渲染
  • 定义日志的格式
  • 高度个性化、可定制
  • 通过 Let’s Encrypt 实现自动 TLS
  • HTTP/2 支持

Echo 上手

从 4.0.0 版本开始,Echo 可作为 Go 模块使用。因此,需要一个能够理解 /vN 后缀导入的 Go 版本:


  • 1.9.7+
  • 1.10.3+
  • 1.14+


这些 Go 版本中的任何一个都允许您将 Echo 导入为 github.com/labstack/echo/v4,这是今后使用 Echo 的推荐方式。

Echo 安装

这里以 Linux 为例,我们先看一下自己本地的 Go 版本:

$ go version     
go version go1.16.2 linux/amd64


本文使用的是 Go 1.16 版本,所以可以直接上手使用。


  1. 新建一个项目文件夹 HeadFirstEcho,然后进入该文件目录下:
$ mkdir HeadFirstEcho && cd HeadFirstEcho


  1. 然后利用 go mod 初始化该项目:
$ go mod init HeadFirstEcho               
go: creating new go.mod: module HeadFirstEcho


  1. 下载 Echo,命令:
// go get github.com/labstack/echo/{version}
go get github.com/labstack/echo/v4


本次下载成功如下:


image.png


下载成功后,我们来看一下如果利用 Echo 来写一个 HelloWorld 项目。

Hello World

在 Hello World 程序中,我们只需要让用户通过访问服务器地址,得到一个 Hello World 的文本就算成功,所以只需要编写一个服务器。创建一个 helloServer.go 文件:

package main
import (
  "net/http"
  "github.com/labstack/echo/v4"
)
func main() {
  e := echo.New()  // 得到一个 echo.Echo 的实例
        // 注册路由
  e.GET("/", func(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
  })
        // 开启 HTTP Server
  e.Logger.Fatal(e.Start(":2022"))
}


启动我们的服务器: $ go run helloServer.go , 接着我们能看到如下的界面,说明 helloServer 服务器启动成功!


image.png


然后我们打开浏览器,访问:http://localhost:2022/,就能成功的看到我们的 Hello,World! 输出到屏幕上。


image.png


对比,之前用 Go 系统自带的 http 库实现的 HelloWorld 应用还是有异曲同工之妙的。

带日志功能的 HelloWorld 程序

Echo 还带有非常丰富的日志中间件:日志会记录每个有关 HTTP 请求的信息,只需要使用 e.Use(middleware.Logger()) 方法就能调用日志记录器,非常方便。当然日志也支持自定义,具体之后的文章再进行研究。


恢复中间件从链中任何地方的 panic 报错中恢复,并能够打印堆栈跟踪并将控制权处理给集中式 HTTPErrorHandler。用法也很简单:e.Use(middleware.Recover())


来看如下的例子:

package main
import (
  "net/http"
  "github.com/labstack/echo/v4"
  "github.com/labstack/echo/v4/middleware"
)
// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "你好,世界!")
}
func main() {
  // 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(":1323"))
}


除了能在前端显示出:“你好,世界!” 的界面,还能在后台看到日志打印在控制台上:

$ go run hello.go                              
   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.6.3
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323
{"time":"2022-02-25T15:08:10.481569868+08:00","id":"","remote_ip":"127.0.0.1","host":"localhost:1323","method":"GET","uri":"/","user_agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0","status":200,"error":"","latency":9308,"latency_human":"9.308µs","bytes_in":0,"bytes_out":16}


能看到的日志信息有:


  • time :时间,2022-02-25T15:08:10.481569868+08:00
  • id:此处为空
  • remote_ip:127.0.0.1
  • host:localhost:1323
  • method:GET 方法
  • uri:/ 根目录
  • user_agent 用户头:此处为火狐 Ubuntu 版,Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0
  • status:状态码,200
  • error:空
  • latency: 9308
  • latency_human: 9.308µs
  • bytes_in: 0
  • bytes_out: 16

其他中间件

从上面两个中间件我们可以看出,Echo 的确不愧为官网自称的极简 Web 框架,所有的函数调用都非常简单,而且支持可定制化。


在官方文档中,我们能看到所有的基本 Web 组件都已经帮我们实现好,比如:


  • Binding:绑定请求数据
  • Context:上下文,表示当前 HTTP 请求的上下文。
  • Cookies
  • Error Handling:错误处理
  • Request:请求
  • Response:响应
  • Static Files:静态文件
  • Templates:模板
  • Testing:测试


还有更多的中间件,包括 认证、CORS、CSRF、JWT、Logger、Secure、Session 等等,感兴趣的朋友赶紧上手试一试吧。

丰富而简单的案例

如果有一点 Web 开发的知识,对上述内容一定不陌生。


除了针对每一个组件的介绍,官方文档也提供了很多案例来帮助我们更好的学习和上手 Echo 这个框架,比如文件下载上传、还有一个 WebSocket 的案例实现服务器和客户端的聊天。


跟着文档学习的过程你中,发现每个程序案例都很简单,几乎都是在本地运行代码,就能看到同样的效果,对新人真的很友好!


如果大家感兴趣的话,就自己去探索吧,刚好笔者也想做一个简单的 Web 项目,刚好可以利用上 Echo ,一边开发一边学习。

总结

Go 语言的 Web 开发框架其实也有很多:GinBeegoRevel


Echo 作为其中的一款。截止到 2022 年,目前已经在 Github 上收获了 21.7k 的 Star 和 1.9k 的 Fork,可以说是经得起时间检验,得到了大家的认可,正可谓对应上标题中的回声嘹亮


在著名的 Go 开发者成长路线图 中也推荐了 Go 语言开发者应该要学习 Echo 框架。


image.png


最后,希望更多人能够和我一样加入对这个框架的学习。之后的文章中,会介绍 Echo 的其他组件在 Web 开发中的运用,下一篇 Echo 文章见!

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
5月前
|
人工智能 测试技术 Go
Go 语言的主流框架
本文全面解析了 Go 语言主流技术生态,涵盖 Web 框架、微服务、数据库工具、测试与部署等多个领域。重点介绍了 Gin、Echo、Beego 等高性能框架,以及 gRPC-Go、Go-Micro 等微服务组件。同时分析了 GORM、Ent 等 ORM 工具与测试部署方案,并结合场景提供选型建议,助力开发者构建高效稳定的 Go 应用。
1235 0
|
3月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
292 86
|
2月前
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
461 4
|
2月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
359 1
|
6月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
6月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
6月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
环境搭建 GO+版的祝福语管理系统 前期想法 界面展示 整体界面 增加祝福信息 修改操作 删除操作 退出
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
178 1
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
290 1