Go语言框架学习(二) | 青训营笔记

146 阅读2分钟

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

学习内容

今天学习了Kitex和Hertz两个框架,Kitex是一个RPC框架,Hertz是一个Web框架。

Kitex

RPC框架,目前对Windows的支持不完善。

Kitex的使用

定义IDL

使用IDL定义服务与接口。
如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回的值是什么样的。这时候,就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

namespqce go api
struct Request{
    1 : string message
}
struct Response{
    1 : string message
}
service Echo{
    Response echo(1 : Requset req)
}

服务默认监听8888端口

创建Client

c, err := echo.NewClient("clientName", client.WithHostPorts("0.0.0.0:8888"))

发起请求

req := $api.Request(Message: "xxxx")
resp, err := c.Echo(contest.Bockground(), req, callopt.WithRPCTimeout(3*time.Second))

Kitex的服务注册与发现

目前,Kitex的服务注册与发现已经对接了主流的服务与发现中心,如ETCD,Nacos等。

Kitex生态

捕获.PNG

Hertz

Web框架

Hertz的使用

服务监听8080端口并注册了一个GET方法的路由函数。

Hertz路由

Hertz提供了GET、POST、PUT、DELETE和ANY等方法用于注册路由。

捕获.PNG

Hertz提供了路由组(Group)的能力,用于支持路由分组的功能

捕获.PNG

Hertz提供了参数路由和通配路由,路由的优先级为:静态路由 > 命名路由 > 通配路由

捕获.PNG

Hertz参数绑定

Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验

捕获.PNG

Hertz中间件

Hertz的中间件主要分为客户端中间件和服务端中间件。
中间件首尾相连最终形成一个过滤器链,用户可以在中间件中设定一些通用的处理规则,比如:统一错误处理,用户信息验证,跨域处理等。Hertz提供了两个通用的中间件,一个是JWT验证,一个是Cors跨域中间件,开箱即用。

Hertz Client

Hertz提供了HTTP Client用于帮助用户发送HTTP请求。

Hertz性能

  • 网络库 Netpoll
  • Json编解码Sonic
  • 使用sync.Pool复用对象协议层数据解析优化