hertz 搭建项目结构 | 青训营笔记

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

一、hertz 概要

1.介绍

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

2.架构

image.png

3.特点

  • 高易用性

    在开发过程中,快速写出来正确的代码往往是更重要的。因此,在 Hertz 在迭代过程中,积极听取用户意见,持续打磨框架,希望为用户提供一个更好的使用体验,帮助用户更快的写出正确的代码。

  • 高性能

    Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景相较于 go net,Hertz 在 QPS、时延上均具有一定优势。

  • 高扩展性

    Hertz 采用了分层设计,提供了较多的接口以及默认的扩展实现,用户也可以自行扩展。同时得益于框架的分层设计,框架的扩展性也会大很多。

  • 多协议支持

    Hertz 框架原生提供 HTTP1.1、ALPN 协议支持。除此之外,由于分层设计,Hertz 甚至支持自定义构建协议解析逻辑,以满足协议层扩展的任意需求。

  • 网络层切换能力

    Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力,用户可以针对不同的场景选择合适的网络库,同时也支持以插件的方式为 Hertz 扩展网络库实现。

二、hertz 命令行安装

建议环境:linux(很重要)

本机使用:ubuntu18.04

1.代码放置位置

将代码放置于$GOPATH/src下,需在$GOPATH/src下创建额外目录,进入该目录后再获取代码:

 mkdir -p $(go env GOPATH)/src/github.com/cloudwego
 cd $(go env GOPATH)/src/github.com/cloudwego

2.安装命令行工具

 go install github.com/cloudwego/hertz/cmd/hz@latest

3.测试

1.在当前目录$GOPATH/src/github.com/cloudwego下创建 hertz_demo 文件夹,进入该目录中

 mkdir hertz_demo && cd hertz_demo

2.生成代码

 hz new

3.整理 & 拉取依赖

 go mod tidy

4.编译 & 启动

 go build -o hertz_demo && ./hertz_demo

5.启动成功后默认开始监听8888号端口,对端口进行测试

 curl http://127.0.0.1:8888/ping

不出意外,我们可以看到类似如下输出

 {"message":"pong"}

三、使用 hertz 搭建项目框架

思路:

1.使用 hz new 创建新的项目最外围代码

2.使用提供的 IDL 文件生成服务的框架代码

3.在框架内逐一实现每个请求的处理逻辑