这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:
- Gorm、KiteX,Hertz的框架学习
二、详细知识点介绍:
- Gorm
- 安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
2、使用经验
不要在代码里创建数据库和表,容易涉及删除和更改。在需求设计前先设计好数据库表结构,创建并使用。
Gorm使用Struct对应表结构,使用对应的crud操作数据库表。
Gorm的事务使用Begin、Commit,Rollback方法使用事务。
GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
记录一些具体操作
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // 通过数据的指针来创建
GORM 支持根据 map[string]interface{} 和 []map[string]interface{}{} 创建记录
GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误
Updates 方法支持 struct 和 map[string]interface{} 参数。当使用 struct 更新时,默认情况下,GORM 只会更新非零值的字段
删除一条记录时,删除对象需要指定主键,否则会触发 [批量 Delete]
如果您的模型包含了一个 gorm.deletedat 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力!
拥有软删除能力的模型调用 Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过正常的查询方法找到该记录
使用 Unscoped 永久删除匹配的记录
db.Unscoped().Delete(&order)
一些使用范式 对于数据库层面的crud最好写成较原子化的操作,例如查询单列,查询多列,更新,删除,插入等方法单独写在model层。对于使用的函数,将gorm对象作为参数传入,返回值增加错误处理
func Select(db *Gorm.Model, map[]string interface{}){
if db == nil {
db = db.Create(&user)
}
}
- KiteX
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
kitex --version
vx.x.x
thriftgo --version
thriftgo x.x.x
若将代码放置于 $GOPATH/src 下,需在 $GOPATH/src 下创建额外目录,进入该目录后再获取代码
mkdir -p $(go env GOPATH)/src/github.com/cloudwego
cd $(go env GOPATH)/src/github.com/cloudwego
先创建好IDL文件,设计好接口,生成代码
kitex -module example -service example echo.thrift
- HertX
HertX大体和KiteX操作一致