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

51 阅读2分钟

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

框架

Gorm

gorm.cn/zh_CN/docs/…

规约

  • 使用名为ID的字段作为主键
  • 使用结构体的 蛇形复数 作为表名
  • 字段名的 蛇形 作为列名
  • 使用 CreateAt 和 UpdateAt 字段作为创建和更新时间

基本使用

image.png

  • db.Model允许您告诉gorm这个操作与哪个模型结构有关

创建

image.png

查询

image.png

更新

image.png

  • db.Model()内的条件会被Where()覆盖

删除

image.png

  • GORM提供了gorm.DeletedAt用于帮助用户实现软删
  • 拥有软删除能力的Model调用Delete时,记录不会被从数据库中真正删除。但GORM会将DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。
  • 使用Unscoped可以查询到被软删的数据

事务

  • 提供了Begin、Commit、Rollback方法

image.png

  • 自动提交

image.png

  • Hook

image.png

  • GORM在提供了CURD的Hook 能力。
  • Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。
  • 如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。

性能提高

image.png

  • 对于写操作(创建、更新、删除),为了确保数据的完整性,GORM会将它们封装在事务内运行。但这会降低性能,你可以使用SkipDefaultTransaction关闭默认事务。

Kitex

用于代码生成

RPC

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

image.png

服务注册与发现

image.png

image.png

Hertz

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

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

image.png

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

image.png

  • Hertz的中间件主要分为客户端中间件与服务端中间件,如下展示一个服务端中间件。

image.png