这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
Gorm
-
Gorm使用名未ID的字段作为主键
-
使用i建二狗提的蛇形负数作为表名
-
字段名的蛇形作为列名
-
创建
- 使用 Upsert 使用 clause.OnConflict 处理数据冲突
- 使用默认值使用 default 标签未字段定义默认值
-
查询
- 使用 First 时,需要注意查询不到数据会返回 ErrRecordNotFound
- 使用 Find 查询多条数据,查询不到数据不会返回错误
- 当时殷弘结构作为条件查询时,Gorm 指挥查询非零值字段,如果字段值未0,‘’,false或者其他零值,改字段不会被用于构建查询条件,使用Map来构建查询条件
-
更新
- 使用 Struct 更新时,指挥更新非零值,如果需要更新零值可以使用 Map 更新或使用 Select 选择字段
-
删除
- Gorm 提供了gorm.DeletedAt 用于帮助用户实现软删
- 拥有软删除能力的 Model 调用 Delete 时,记录不会被从数据库中真正删除。但是Gorm 会将 DeletedAt 置为当前时间,并且不能再通过正常的查询方法找到该记录
- 使用 Unscoped 可以查询到被软删的数据
-
Gorm 事务
- Gorm 提供了 Begin、Commit、Rollback 方法用于使用事务
- Gorm 提供了 Transaction 方法用于自动提交事务,避免用户漏写 Commit、Rollback
-
Gorm Hook
- Gorm 提供了 CRUD 的 Hook 能力
- Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数
- 如果任何 Hook 返回错误,Gorm 将停止后续的操作并回滚事务
-
Gorm 性能提高
- 对于写操作(创建、更新、删除),为了确保数据的完整性,Gorm 会将它们封装再事务内运行,但是会降低性能,可以使用 SkipDefaultTransaction 关闭默认事务
- 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度
-
Gorm 常用拓展
- Gorm 代码生成工具 github.com/go-gorm/gen
- Gorm 分片库方案 github.com/go-gorm/sha…
- Gorm 手动索引 github.com/go-gorm/hin…
- Gorm 乐观锁 github.com/go-gorm/opt…
- Gorm 读写分离 github.com/go-gorm/dbr…
- Gorm OpenTelemetry 拓展 github.com/go-gorm/ope…
Kitex
- 使用 IDL 定义服务与接口
- Kitex 生成代码
kitex -module example -service example echo.thrift
build.sh:构建脚本
kitex_gen:IDL 内容相关的生成代码,主要时基础的 Server/Client 代码
main.go:程序入口
handler.go:用户在该文件里实现 IDL service 定义的方法
-
Kitex 生态
- XDS 扩展 github.com/kitex-contr…
- opentelemetry 扩展 github.com/kitex-contr…
- ETCD 服务注册与发现扩展 github.com/kitex-contr…
- Nacos 服务注册与发现扩展 github.com/kitex-contr…
- Zookeeper 服务注册与发现扩展 github.com/kitex-contr…
- palaris 扩展 github.com/kitex-contr…
- 丰富的实例代码与业务 Demo github.com/cloudwego/k…
Hertz
-
Hertz 提供了 GET、POST、PUT、DELETE、ANY 等方法用于注册路由
-
Hertz 提供了参数路由和通配路由,路由的优先级为:静态路由 > 命名路由 > 通配路由
-
Hertz 提供了Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验
-
Hertz 的中间件主要分为客户端中间件和服务端中间件
-
终止中间件调用链的执行
- c.Abort
- c.AbortWithMsg
- c.AbortWithStats
-
-
Hertz 提供了代码生成工具 Hz,通过定义 IDL (interface description language)文件即可生成对应的基础服务代码
-
Hertz 生态
- HTTP2 扩展 github.com/hertz-contr…
- opentelemetry 扩展 github.com/hertz-contr…
- 国际化扩展 github.com/hertz-contr…
- 反向代理扩展 github.com/hertz-contr…
- JWT 鉴权扩展 github.com/hertz-contr…
- Websocket 扩展 github.com/hertz-contr…
- 丰富的实例代码与业务 Demo github.com/cloudwego/h…