Hertz入门实践 | 青训营

219 阅读5分钟

前言

Hertz是字节开源的 Go 语言微服务 HTTP 框架,具有高易用性、高性能、高扩展性等特点。

如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

本文将从实践入手,练习 Hertz 的基本使用。学习框架最高效的办法就是阅读官方文档,我们可以访问www.cloudwego.io/zh/docs/her… ,学习 Hertz 官网文档的快速入门案例,迅速地上手 Hertz 框架。

快速入门

根据官网的快速开始说明,我们很快就能搭建一个简单的 Web 服务器。当然在此之前我们需要准备Go语言相应的开发环境,这里我推荐使用 windows 的 wsl2 创建 Ubuntu20.04 版本 的 linux 系统 (相较于创建虚拟机的好处是可以利用本机的GPU进行处理),然后在下载相应的 Go 语言包。

首先我们需要使用 mkdir hertz_start 命令创建文件夹,然后使用 cd hertz_start 进入该文件夹,紧接着创建 main.go 文件,下面分步骤说明编写 main.go 的逻辑。

1. 创建 Hertz 实例

在 main.go 文件中,首先我们要使用 h := server.Default() 语句创建一个Hertz 实例,该实例代表了一个默认的 Hertz 服务器,h是这个实例的引用。其实我们也可以使用 server.New() 创建,但是此函数并不会使用默认的 Recovery 中间件,如下面的代码,这些细节我们都可以在源码中找到。

// Default creates a hertz instance with default middlewares.
func Default(opts ...config.Option) *Hertz {
	h := New(opts...)
	h.Use(recovery.Recovery())
	return h
}

2. 建立路由映射

要想实现一个基本的 Web API,必须要建立路由映射,建立路由映射的意义在于帮助将请求的 URL 路径与处理程序(或控制器)进行关联,以便根据不同的 URL 路径来执行相应的代码逻辑。

在 Hertz 框架中,我们可以使用 Hertz 实例的引用 h 的 GET 函数创建 GET 接口,该 GET 函数有 2 个参数,第一个参数是相对 URL 路径,第二个参数则是与该 URL 相映射的回调函数。当客户端访问该 URL 时,服务器就会调用该回调函数。

h.GET("/hello", func(c context.Context, ctx *app.RequestContext) {
		ctx.JSON(consts.StatusOK, utils.H{"message": "hello world"})
	})

回调函数的类型定义为type HandlerFunc func(c context.Context, ctx *RequestContext), 从中我们可以了解到 Hertz 为我们提供了一个标准 context.Context 和一个 RequestContext 作为函数的入参。

官方文档介绍:c 作为上下文在中间件 /handler 之间传递,协程安全。ctx 主要用来存储请求级别的变量,请求结束就回收了,特点是查询效率高(底层是 map),协程不安全,且未实现 context.Context 接口。

在回调函数中,我们就可以编写客户端访问 URL 所要执行的代码逻辑,这里我们利用 ctx.JSON 函数向客户端返回application/json 类型的 http 响应数据,即响应的主体内容是以JSON格式编码的数据。

如下面的代码,就是 ctx.JSON 函数的定义内容,该函数的第一个参数为 http 的响应码,如果我们传入consts.StatusOK 常量,即为成功响应返回码 200。该函数的第二个参数类型为interface{},这是一种空接口,可以接受任何类型的值作为参数。通过此函数,我们就可以将传入的类型序列化为 json 字符串。

// JSON serializes the given struct as JSON into the response body.
//
// It also sets the Content-Type as "application/json".
func (ctx *RequestContext) JSON(code int, obj interface{}) {
	ctx.Render(code, render.JSONRender{Data: obj})
}

在前后端分离的项目中,经常使用application/json 作为服务器返回给浏览器的数据类型,这样好处是:

  1. 结构化数据:JSON格式是一种轻量级的、易于阅读和编写的数据交换格式。通过使用application/json类型,可以在HTTP请求和响应中传输结构化的数据,使得数据更易于理解和处理。
  2. 跨平台兼容性:JSON是一种通用的数据格式,广泛支持于各种编程语言和平台。通过使用application/json类型,不同的客户端和服务器可以方便地进行数据交互,实现跨平台的兼容性。
  3. RESTful API:在构建RESTful API时,application/json类型是常用的数据传输格式之一。它使得客户端和服务器之间可以通过JSON来传递资源、参数和响应,实现了统一的接口设计和数据交互规范。

3. 运行服务

Hertz 提供了 Spin 函数用于启动服务器。Spin函数是一个服务器运行的方法,它会一直运行直到捕获到操作系统信号(os.Signal)或者由h.Run()返回的错误。

总结

本文详细说明了Hertz的快速使用的基本步骤。

  1. 创建Hertz实例:使用h := server.Default()语句创建一个默认的Hertz服务器实例,也可以使用server.New()创建自定义的Hertz服务器实例。
  2. 建立路由映射:利用Hertz实例的GET函数创建GET接口,通过URL路径与回调函数进行关联。当客户端访问该URL时,服务器会调用相应的回调函数处理请求。
  3. 运行服务:使用Spin函数启动服务器,它会一直运行直到捕获到操作系统信号或者出现错误。

文章最后说明了使用application/json作为服务器返回给浏览器的数据类型的好处,包括结构化数据、跨平台兼容性和RESTful API等。通过学习官方文档的快速入门案例,可以快速上手Hertz框架并了解其基本使用方法。

学习框架最高效的办法就是阅读官方文档,上面的内容仅仅是对文档中快速入门案例的实践分析,希望在接下来的学习中过程,更深入地实践分析 Hertz 的高级特性和应用。