go后端框架hertz | 青训营笔记

208 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

hertz的简介

Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttpginecho 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

image.png

它的框架特点[:](概览 | CloudWeGo)

hertz的使用

安装

首先安装
go install github.com/cloudwego/hertz/cmd/hz@latest
查看是否安装成功
hz -v

建议使用Hertz自带的命令行工具 hz 来辅助开发。 提到hz ,它是由Hertz框架提供的用于生成代码的工具。目前,hz可以基于thriftprotobuf IDL为Hertz项目生成脚手架。

hz生成的代码,一部分由底层编译器生成(通常是关于IDL中定义的结构体),另一部分是用户自定义的路由、方法和其他IDL信息。用户可以直接运行代码。

在执行流方面,当hz使用thrift IDL生成代码时,hz调用thrift- go来生成go结构体代码,并将自己作为插件执行到thrift -gen-hertz (命名为thrift-gen-hertz)以生成其余代码。在使用protobuf IDL时也是如此。

  • 生成/编写示例代码
  • 在当前目录下创建 hertz_demo 文件夹,进入该目录中
  • 创建 main.go 文件
package main

import (
   "context""github.com/cloudwego/hertz/pkg/app"
   "github.com/cloudwego/hertz/pkg/app/server"
   "github.com/cloudwego/hertz/pkg/common/utils"
   "github.com/cloudwego/hertz/pkg/protocol/consts"
)

funcmain() {
   h := server.Default()

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

   h.Spin()
}
  • 生成 go.mod 文件 go mod init hertz_demo
  • 整理 & 拉取依赖 go mod tidy 运行该代码 go build -o hertz_demo go run hertz_demo

测试结果

curl http://127.0.0.1:8888/ping

StatusCode        : 200
StatusDescription : OK
Content           : {"message":"pong"}
RawContent        : HTTP/1.1 200 OK
                   Content-Length: 18
                   Content-Type: application/json; charset=utf-8
                   Date: Mon, 30 Jan 2023 03:26:53 GMT
                   Server: hertz

                   {"message":"pong"}
Forms             : {}
Headers           : {[Content-Length, 18], [Content-Type, application/json; charset=utf-8], [Date, Mon, 30 Jan 2023 03:26:53 GMT], [Server,  
                   hertz]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 18

本文主要介绍了 Golang 微服务 HTTP 框架 Hertz,只是简单的入门练习,如果想了解更多内容还是需要仔细研究官方文档,官方文档的内容很清晰全面,后续还需要深入学习。