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

52 阅读3分钟

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

课程介绍

  • 将前面几节课所学到的知识应用到项目中
  • 掌握Hertz/kitex/Gorm的基本使用

什么是三件套

  • Gorm
    • 一个强大的ORM(对象关系映射)框架
  • Kitex
    • Golang微服务RPC(远程过程调用)框架
  • Hertz
    • HTTP框架

三件套的使用

Gorm

Gorm支持的数据库:MySQL,SQLServer,PostgreSQL,SQLite。 Gorm通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动

查找

First使用踩坑,使用First时,需要注意查询不到数据会返回errRecordNotFount

使用Find查询多条数据,查询不到数据不会返回错误

使用结构体作为查询条件

当使用结构作为条件查询时,GORM只会查询非零值。这意味着如果您的字段值为‘0’,false或其他零值,该字段不会被用于构建查询条件,使用Map来构建查询条件

更新数据

//条件更新每个列
db.Modle(&User{ID:111}).where("age > ?",18).Update("name","hello")

//更新多个列
db.Model(&User{ID:111}).Updates(User{Name:"hello",Age:18"})

/*根据map更新属性*/
db.Model(&User{ID:111}).Update(map[string]interface{}{"name":"hello","age":18,"actived":false})

//更新选定字段
db.Model(&User{ID:111}).Select("name").Updates(map[string]interface{}{"name":hello,
"age":18,"actived":false})

//表达式更新
ab.Model(&User{ID:111}).Update("age",gorm.Expr("age*?+?",2,100)))

删除数据

gorm提供了gorm.DeleteAt帮助用户实现软删除

拥有软删除能力的Model调用Delete时,记录不会被从数据库中真正删除,单GORM会将DELETEAT置为当前时间,并且你不能再通过正常的查询方法找到该记录

调用 db.Delete(&表名{},10)//删除id为10的字段

事务

Gorm提供了Begin,Commit,Rollback方法用于使用事物

//在事务中执行一些db操作,应该用tx而不是db
tx := db.Begin()//开始事务
tx.Rollback()
tx.commit() //提交事务
//提供了Tansaction方法用于自动提交事务,避免用户漏写Commit,Rollback

Hook

Hook 是在创建,查询,更新,删除等操作之前,之后自动调用的函数

如果任何Hook返回错误,GORM将停止后续的操作并回滚事务

性能提高

对于写操作,为了确保数据的完整性,GORM会将它们封装在事务类运行,会降低性能

可以通过 SkipDefaultTransaction关闭默认事务

使用 PrerareStmt缓存预编译语句可以提高后续调用的速度

GORM 生态

github.com/go-gorm/

GORM代码生成工具 gen

分片库方案 sharding

手动索引 hints

乐观锁 optimisticlock

读写分离 dbresolver

拓展 opentelemetry

Kitex

需要在linux系统上运行

使用IDL定义服务与接口

如果我们要进行RPC,就需要知到对方的接口是什么,需要回传什么样的参数,同时也需要知到返回值是什么样的。这时候就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知到函数签名一样

Kitex生成代码

使用 Kitex -moudule example -service example echo.thrift明亮代码

build.sh:构建脚本

kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码

main.go程序入口

handler.go用户在该文件里实现IDL service定义的方法

生态

  • XDS扩展
  • opentelemetry扩展
  • ETCD服务注册与发现扩展
  • Nacos服务注册与发现扩展
  • Zookeeper服务注册与发现拓展
  • polaris拓展
  • 丰富的实例代码与业务demo

Hertz

是一个基本的HTTP框架

对HTTP完全称不上了解....等过段时间回来填坑