Go 框架三件套详解(Web/RPC/ORM) | 青训营笔记

199 阅读2分钟

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

今日内容

学习完了青训营课程 Go 框架三件套详解(Web/RPC/ORM) 之后的一些总结。

课程内容

三件套的使用

GORM

具体建议参考文档使用,文档一定比我写的好 GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

kitex

同上 Kitex | CloudWeGo

kitex 是一个 rpc(Remote Procedure Call) 框架。远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。

Google 有一个 GRPC协议,底层就是 http2 协议,http1 包含了太多没用的信息,会浪费网络资源。大厂一般会根据自己的需求定制 RPC 协议,但是缺点就是缺乏灵活性。常见的序列化协议就是 protobuf,json 等。简单的 RPC 写起来也不复杂,我也打算找时间看几个简单的源码尝试写一个 RPC。

hertz

同上 Hertz | CloudWeGo

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 复用对象,协议层数据解析优化

小结

今天主要讲了三件套的使用,对于初学者光是看视频不足以达到比较好的学习效果,需要跟着自己写一遍代码,过程中可能会遇到问题,需要去看官方文档找到解决方案。更多扩展的使用也是需要基于开发和文档。