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

101 阅读1分钟

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

Gorm

  • Gorm中struct无法更新零值,会自动忽略,如果想更新零值可以使用map或者select

Kitex

定义IDL

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

image.png

Kitex生成代码

  • 使用kitex -module example -service example echo.thrift命令生成代码

桩代码结构

image.png

build.sh :构建脚本
kitex gen :IDL内容相关的生成代码,主要是基础的Server/Client代码。
main.go程序入口
handler.go用户在该文件里实现IDL service定义的方法

Kitex基本使用

package main
import (
"context
"example/kitex_gen/api"
}
// EchoImpl implements the last service interface defined in the IDL.

type EchoImpl struct{}

// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context.Context,req *api.Request)(resp *api.Response,err error){
    // TOD0: Your code here. . .   
return
}
  • Client 发起请求

image.png

Hertz基本使用

  • Hertz提供了GET、POST、PUT、DELETE、ANY 等方法用于注册路由。
  • Hertz提供了参数路由和通配路由,路由的优先级为:静态路由>命名路由>通配路由 899
  • Hertz提供了Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验
  • Hertz的中间件主要分为客户端中间件与服务端中间件,如下展示一个服务端中间件。
  • Hertz提供了代码生成工具Hz,通过定义IDL(inteface description language )文件即可生成对应的基础服务代码。

Hertz性能

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

Hertz生态

image.png