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

99 阅读3分钟

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

1.Gorm

  • 迭代了十多年的ORM框架

1.1Gorm的基本使用

image.png

  • 创建一条数据时传递的是对象,多条数据是切片(数组)
  • db.First查询,Find可查询多条
  • map更新零值
  • Gorm的约定(默认)
  • Gorm使用名为ID的字段作为主键
  • 使用结构体的蛇形负数作为表名
  • 字段名的蛇形作为列名
  • 使用CreatedAt、UpdatedAt字段作为创建、更新时间 gorm.cn/zh_CN/docs/…
  • GORM支持Mysql、SQLServer、PostgreSQL,SQLite
    • GORM通过驱动来链接数据库,如需连接其它类型数据库,可以复用/自行开发驱动
    • DSN github.com/go-sql-driv…
  • Gorm创建数据
    • gorm是链式应用
    • db.Create会返回一个gorm对象
    • Upsert 使用clause.OnConlict处理数据冲突
    • 默认值 使用default标签
  • Gorm查询数据
    • First查询不到会返回错误
    • Find查询不到不会返回错误
    • 使用结构体作为查询条件,GORM只会查询非零值字段,字段值为0、“、false或其他零值,不会用于构建查询条件,应使用map
  • Gorm更新数据
    • 使用struct更新时,只会更新零值,可以使用Map更新或使用Select选择字段
  • Gorm删除数据
    • 物理删除
      • db.delete()
    • 软删除
      • gorm.DeletedAt
      • 使用Unscoped可以查询到软删除的数据
  • Gorm事务
    • 提供Begin、Commit、Rollback
    • 注意用tx
    • 提供Tansaction方法用于自动提交事务,避免用户漏写Commit、Rollbcak
  • Gorm Hook
    • 提高CURD的Hook能力
    • 是在创建、查询、更新、删除等操作之前、之后自动调用的函数
    • 如何任何Hook返回错误,Gorm将停止后续的操作并回滚事务
  • Gorm 性能提高
    • 对于写操作,Gorm为了确保数据完整性,封装在事务内运行,可以使用SkipDefaultTransaction关闭默认事务
  • Gorm生态
    • 代码生成
    • 分片库方案
    • 手动索引
    • 乐观锁
    • 读写分离
    • OpenTelemetry扩展
  • Gorm文档 gorm.cn

2.Kitex

  • Golang微服务RPC框架,高性能强可扩展
  • Kitex代码生成工具
    • go install github.com/cloudwego/kitex/tool/cmd/kitex@lates
    • go install github.com/cloudwego/thriftgo@latest
  • 定义IDL
  • Kitex生成代码
  • 服务默认监听8888端口
  • Kitex Client发起请求
    • 创建Client 传递目标服务名
    • 发起请求
  • 服务注册对接了主流服务注册与发现中心,如ETCD,Nacos等
  • Kitex生态
  • github.com/kitex-contr…
    • XDS扩展 多套测试环境
    • opentelemetry扩展 链路追踪 日志
    • ETCD服务注册和发现扩展
    • Nacos 服务注册与发现扩展
    • Zookeeper服务注册与发现扩展
    • polaris扩展
    • 代码实例于demo github.com/cloudwego/k…
  • Kitex文档 www.cloudwego.io/zh/docs/kit…

3.Hertz

  • HTTP框架,高易用、高性能、高扩展

  • Hertz www.cloudwego.io/zh/docs/her…

  • 监听8080端口,注册一个get方法的路由函数

  • 提供了get、post、put、delete、any等方法用于注册路由

  • 参数路由 通配路由 优先级 静态路由>命名路由>通配路由

  • 参数绑定 Bind Validate BindAndValidate 用于进行参数绑定和校验

  • 中间件 客户端和服务端中间件

    • 终止中间件调用链的执行 Abort
    • AbortWithMsg
    • AbortWithStats
  • 提供HTTP Client 帮助用户发送HTTP请求

    • dst复用
  • Hz代码生成工具 定义IDL 即可生成对于的基础服务代码

  • 目录结构 参考文档以及青训营的ppt

  • Hertz性能

总结

本笔记倾向于随记,比较随意,目的便是一种思路的梳理,具体操作和实现还是得在看具体文档。后来才发现这截图有东西啊。。。