go常用框架 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
Web
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
连接到数据库
Gorm的约定
- 使用名为ID的字段作为主键
- 使用结构体的蛇形负数作为表名
- 字段名的蛇形作为列名
- 使用CreateAt、UpdatedAt字段作为创建、更新时间
创建数据
查询数据
First的使用踩坑:
- 使用First时,需要注意查询不到数据会返回ErrRecordNotFound。
- 使用Find查询多条数据,查询不到数据不会返回错误。
使用结构体作为查询条件:
- 当使用结构体作为条件查询是,GORM只会查询非零字段。这意味着如果您的字段值为0、”、false或其他零值,该字段不会被用于构建查询条件。此时应当使用Map来构建查询条件。
更新数据
Updates 方法支持 struct 和 map[string]interface{} 参数。当使用 struct 更新时,默认情况下,GORM 只会更新非零值的字段
删除数据
物理删除
软删除
如果您的模型包含了一个 gorm.deletedat 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力!
拥有软删除能力的模型调用 Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过正常的查询方法找到该记录。
事务
为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。
Hook钩子
Hook 是在创建、查询、更新、删除等操作之前、之后调用的函数。
如果您已经为模型定义了指定的方法,它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。
钩子方法的函数签名应该是 func(*gorm.DB) error
性能提高
对于写操作(创建、更新、删除),为了确保数据的完整性,GORM会将他们封装在事务内部进行,但这会降低性能。可以使用SkipDefaultTransaction关闭默认事务。
使用PrepareStmt缓存预编译语句可以提高后续调用的速度。
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
SkipDefaultTransaction: true,
PrepareStme: true
},)
生态
Rpc
Kitex对Windows的支持不完善,得用WSL2或虚拟机。
安装代码生成工具:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
然后输入kitex -version确认
定义IDL
如果要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么。这时候,就需要IDL
生成代码
kitex -module example -service example echo.thrift
- build.sh,构建脚本
- kitex_gan,IDL相关
- main.go,程序入口
- handler.go,用户在改文件里实现IDL service定义的方法、
基本使用
服务默认监听8888端口。
Client 发起请求
创建Client
发起请求
服务注册与发现
目前Kitex的服务注册与发现已经对接了主流的服务注册与发现中心,如ETCD,Nacos等。
生态
ORM
Hertz
使用Hertz实现,服务监听8080端口并注册了一个GET方法的路由函数
Hertz路由
提供了GET,POST,PUT,DELETE,ANY等方法用于注册路由。
Hertz 提供了路由组 ( Group ) 的能力,用于支持路由分组的功能,同时中间件也可以注册到路由组上。
Hertz提供了参数路由和通配路由,优先级从高到低为静态路由、明明路由、通配路由。
Hertz参数绑定
Hertz提供了Bind、Validate、BindAndValidate函数用于参数绑定和校验
Hertz中间件
Hertz的中间件主要分为客户端中间件与服务端中间件。
Hertz Client
Hertz提供了HTTP Client用于帮助用户发送HTTP请求
Hertz代码生成工具
Hertz提供了代码生成工具Hz,通过定义IDL文件即可生成对应的基础服务代码。
Hertz性能
- 网络库Netpool
- Json编解码Sonic
- 使用sync.Pool复用对象协议层数据解析优化
Hertz生态
实战案例介绍
笔记项目是一个使用Hertz、Kitex、Gorm搭建出来的具备一定业务逻辑的后端API项目