这是我参与「第五届青训营 」笔记创作活动的第2天
1.Gorm
- 迭代了十多年的ORM框架
1.1Gorm的基本使用
- 创建一条数据时传递的是对象,多条数据是切片(数组)
- 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框架,高易用、高性能、高扩展
-
监听8080端口,注册一个get方法的路由函数
-
提供了get、post、put、delete、any等方法用于注册路由
-
参数路由 通配路由 优先级 静态路由>命名路由>通配路由
-
参数绑定 Bind Validate BindAndValidate 用于进行参数绑定和校验
-
中间件 客户端和服务端中间件
- 终止中间件调用链的执行 Abort
- AbortWithMsg
- AbortWithStats
-
提供HTTP Client 帮助用户发送HTTP请求
- dst复用
-
Hz代码生成工具 定义IDL 即可生成对于的基础服务代码
-
目录结构 参考文档以及青训营的ppt
-
Hertz性能
- 网络库 Netpoll
- Json编解码 Sonic
- 使用sysnc.Pool 复用对象 协议层数据解析优化
- 扩展 github.com/cloudwego/h… 笔记项目
- github.com/cloudwego/k…
总结
本笔记倾向于随记,比较随意,目的便是一种思路的梳理,具体操作和实现还是得在看具体文档。后来才发现这截图有东西啊。。。