这是我参与「第五届青训营」伴学笔记创作活动的第 5 天
今日内容
学习完了青训营课程 Go 框架三件套详解(Web/RPC/ORM) 之后的一些总结。
课程内容
三件套的使用
GORM
具体建议参考文档使用,文档一定比我写的好 GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
kitex
kitex 是一个 rpc(Remote Procedure Call) 框架。远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。
Google 有一个 GRPC协议,底层就是 http2 协议,http1 包含了太多没用的信息,会浪费网络资源。大厂一般会根据自己的需求定制 RPC 协议,但是缺点就是缺乏灵活性。常见的序列化协议就是 protobuf,json 等。简单的 RPC 写起来也不复杂,我也打算找时间看几个简单的源码尝试写一个 RPC。
hertz
hertz 与 gin 不同,请求处理的函数中有两个上下文
func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8080")
h.GET("/ping", func(ctx context.Context, c *app.RequestContext) {
c.JSON(consts.StatusOK, Utils.H{"ping": "pong"})
})
h.Spin()
}
提供了 GET, POST, PUT, DELETE, ANY 等方法用于注册路由
支持路由分组
v1 := h.Group("v1")
{
v1.POST("login", loginEndpoint)
v1.POST("submit", submitEndpoint)
v1.POST("streaming_read", readEndpoint)
}
v2 := h.Group("v2")
{
v2.POST("login", loginEndpoint)
v2.POST("submit", submitEndpoint)
v2.POST("streaming_read", readEndpoint)
}
提供了参数路由和通配路由,与 gin 的差不多
提供 Bind, Validate, BindAndValidate 进行参数绑定和校验。
服务端中间件:
c.Abort()c.AbortWithMessage()c.AbortWithStats()
性能工具:
- 网络库:Netpoll
- Json 编解码:Sonic
- 使用 sync.Pool 复用对象,协议层数据解析优化
小结
今天主要讲了三件套的使用,对于初学者光是看视频不足以达到比较好的学习效果,需要跟着自己写一遍代码,过程中可能会遇到问题,需要去看官方文档找到解决方案。更多扩展的使用也是需要基于开发和文档。