青训Day3:Go框架三件套|青训营笔记

106 阅读2分钟

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

三件套

Gorm
Kitex
Hertz

Gorm的约定(默认)

Gorm使用名为ID的字段作为主键
使用结构体的蛇形负数作为表名
字段名的蛇形作为列名

Gorm支持的数据库

MySQL、SQLServer、PostgreGSQL、SQLite
GORM通过驱动来连接数据库

Gorm创建数据

db.Create(p)
使用clause.OnConflict处理唯一索引冲突
db.Clauses(clause.OnConflict{DoNothing: true}).Create(&p)
.Create前面可以拼SQL,后面不行。 如何使用默认值:通过使用default标签为字段定义默认值

Gorm查询数据

First使用踩坑
使用First时,需要注意查询不到数据会返回ErrRecordNotFound。
使用Find查询多条数据,查询不到数据不会返回错误。

result:=db.Where("age>10").Find(&users) // select \* where age > 10;  

使用结构体作为查询条件
当使用结构作为条件查询时,Gorm只会查询非零值自断。使用Map来构建查询条件

Gorm更新数据

db.Model().Where().Update() 使用Struct更新时,只会更新非零值,如果需要更新零值可以使用Map更新或使用Select选择字段。

Gorm删除数据

物理删除
db.Delete()
实际开发使用软删除(自己定义flag)
Gorm提供了gorm.DeleteAt帮助实现软删除
拥有软删除能力的Model调用Delete时,记录不会被从数据库真正删除。但Gorm会将DeletedAt置为当前时间,并且不能再通过正常的查询方法找到该记录。
使用Unscoped可以查询到被软删除的数据

Gorm事务

Gorm提供了Begin、Commit、Rollback方法用于使用事务
tx:=db.Begin()
tx.Create()...
tx.Commit()
Gorm提供了Transaction方法用于自动提交事务,避免用户漏写Commit、Rollback。

Gorm Hook

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

Gorm性能提高

Config {
SkipDefaultTranscation: true,
PrepareStmt: true}

Gorm生态

Kitex

定义IDL

使用IDL定义服务与接口

服务注册与发现

Hertz

服务监听8080端口并注册一个Get方法的路由函数