Go框架三件套学习 | 青训营笔记

67 阅读2分钟

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

一、本堂课重点内容:

  • Gorm、KiteX,Hertz的框架学习

二、详细知识点介绍:

  • Gorm
  1. 安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

2、使用经验

不要在代码里创建数据库和表,容易涉及删除和更改。在需求设计前先设计好数据库表结构,创建并使用。 Gorm使用Struct对应表结构,使用对应的crud操作数据库表。 Gorm的事务使用Begin、Commit,Rollback方法使用事务。 GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间

记录一些具体操作

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // 通过数据的指针来创建

GORM 支持根据 map[string]interface{} 和 []map[string]interface{}{} 创建记录

GORM 提供了 FirstTakeLast 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 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操作一致