大项目日记-Hertz学习
这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
项目进展
目前除聊天记录接口外均已基本实现,但是目前使用的仍是 gin 架构,通过本次青训营课程,我了解到Hertz作为刚刚开源的 Golang 微服务 HTTP 框架,其拥有十分优越的性能,因此在我打算在完成聊天记录接口后将项目整体框架使用Hertz进行重构。
Hertz 的特点
Hertz 作为 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthpttp、 gin、 echo 的优势,因而具有高易用性,高性能、高扩展的特点。
- 高易用性:在上课学习课程时我便发现Hertz是一种可以快速上手的框架
- 高性能: Hertz 相较于 go net、 Hertz在某些特殊场景下具有一定的QPS与时延优势
- 高扩展性:Hertz采用了分层设计,接口较多,易于扩展
- 多协议支持:Hertz框架原生提供HTTP1.1等协议
- 网络切换能力:Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力
Hertz的安装与配置
Golang开发环境
保证现有 Golang 版本 >= 1.15
安装命令行工具hz
go install github.com/cloudwego/hertz/cmd/hz@latest
生成代码
hz new
整理 & 拉取依赖
$ go mod tidy
生成go.mod文件
$ go mod init hertz_demo
Hertz网络库
对于Server, Hertz默认使用notepoll,但可以根据应用场景自行选择合适的网络库来达到最佳性能
server.New(server.WithTransport(standard.NewTransporter))
server.New(server.WithTransport(netpoll.NewTransporter))
从Gorm官方使用文档上学到了以下几点建议\
- 使用TLS Server时需要使用go net网络库
- 在较大 request size 下,使用 go net 网络库加流式,这里的较大一般指的是 request size 在 1M 以上
- 除上述场景外,netpoll 足以胜任
Hertz路由
- Hertz 提供了
GET、POST、PUT、DELETE、ANY等方法用于注册路由 - 而且Hertz还提供了路由分组的能力
- Hertz指出静态路由、命名路由、通配路由,路由优先级依次递减