[ 后端与 Go | 青训营笔记 ]

106 阅读5分钟

[ 后端与 Go | 青训营笔记 ]

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

课内:Go 框架三件套

三件套 Gorm、Kitex、Hertz介绍与实际应用。

重点

  • 课程介绍;
  • 三件套的使用;
  • 实战案例介绍;
  • 课程总结;

细节

课程介绍

目标
  • 知识的实践;
  • 掌握三件套基本用法;
  • 使用三件套完成日常后端开发任务;
三件套介绍

image-20230120120829003

三件套的使用

基本用法

Gorm 的约定

  • Gorm 使用名为 ID 的字段作为主键;
  • 使用结构体的蛇形负数为表名;
  • 字段名的蛇形作为列名;
  • 使用 Created At、UpdatedAt 字段作为创建、更新时间。

image-20230120121645915

Gorm 支持的数据库

  • 目前支持 MtSQL、SQLServer、RostgreSQL、SQLite;
  • Gorm 通过驱动来连接数据库;

Gorm 创建数据

  • 使用 Upset:使用 clause.OnConflict 处理数据冲突;
  • 使用默认值:使用 default 标签为字段定义默认值;

image-20230120122546886

Gorm 查询数据

  • First 使用:需要注意查询不到数据会返回 ErrRecordNotFound。使用 Find 查询多条数据,查询不到数据不会返回错误;
  • 使用结构体作为查询条件:Gorm 只会查询非零值字段。这意味着如果字段值为 0、”、false 或其他零值,该字段不会被用于构建查询条件,使用 Map 来构建查询条件;

image-20230120125754758

Gorm 更新数据

  • 使用Struct 更新时,只会更新非零值,如果需要更新零值可以使用 Map 更新或使用 Select 选择字段;

image-20230120130316698

Gorm 删除数据

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

image-20230120130846773

Gorm 事物

  • Gorm 提供了 Begin、Commit、Rollback 方法用于使用事务。

image-20230120131108334

  • Gorm 提供了 Tansaction 方法用于自动提交事物,避免用户漏写 Commit、Rollbcak;

image-20230120134045892

Gorm Hook

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

image-20230120134812739

Gorm 性能提高

  • 对于写操作(创建、更新、删除),为了保证数据的完整性,Gorm会将它们封装在事物内运行。但这会降低性能,可以使用 SkipDafaultTransaction 关闭默认事物;
  • 使用 PrepareStmt 缓存编译语句可以提高后续调用的速度;

image-20230120135213261

Gorm 生态

image-20230120135304212

安装 Kitex 代码生成工具

image-20230120192338333

定义 IDL

image-20230120192624449

Kitex 生成代码

image-20230120192654056

Kitex 基本使用

image-20230120192726817

Kitex Client 发起请求

image-20230120192807750

Kitex 服务注册与发现

image-20230120192857922

image-20230120192911810

Kitex 生态

image-20230120192936928

Hertz 基本使用

image-20230120193011605

Hertz 路由

image-20230120193038115

image-20230120193053591

image-20230120193117370

Hertz 参数绑定

image-20230120193143662

Hertz 中间件

image-20230120193213263

Hertz Client

image-20230120193242721

Hertz 代码生成工具

image-20230120193315575

image-20230120193331658

Hertz 性能

image-20230120193409072

Hertz 生态

image-20230120193432857

实战案例介绍

项目介绍
  • 笔记项目是一个使用 Hertz、Kitex、Gorm 搭建出来的具有一定业务逻辑的后端 API 项目;

image-20230120193616753

功能介绍

image-20230120193649673

项目调用关系

image-20230120193727250

IDL 介绍

image-20230120193805057

image-20230120193815978

项目技术栈介绍

image-20230120193901045

关键代码讲解

image-20230120193916878

image-20230120193930051

image-20230120193943842

image-20230120193959162

课程总结

总结

image-20230120194013653

期望

image-20230120194029614