【day5】Go 框架三件套详解(Web/RPC/ORM) | 青训营笔记

94 阅读3分钟

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

课程主要分为以下几个部分
1.介绍
a.自我介绍
b.课程内容
c.目标介绍

2.框架使用讲解
a.Gorm
b.Kitex
c.Hertz

3.实战讲解
a.easy_note

4.课程总结
a.课程总结
b.未来展望

1.Gorm

Gorm 是一个己经迭代了10年+的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。
注意:
a.Create,Update,Delete等finisher语句只能放在最后调用,因为在这个之后,SQL语句已经执行了,后续的语句不会被执行
b.使用First时,需要注意查询不到数据会返回ErrRecordNotFound错误;使用Find查询多条数据,查询不到数据不会返回错误【常用】
c.当使用结构作为条件查询/更新时,GORM 只会查询非零值字段。这意味着如果字段值为 0、”“、false 或其他0值时,该字段不会被用于构建查询条件,如果需要查询0值,则使用Map来构建查询条件。
d.使用Struct更新时,只会更新非0值,如果需要更新0值可以使用Map更新或者使用Select选择字段
e.GORM提供了gorm.DeleteAt帮助用户实现软删除;正常查询时不能查询到软删的记录,除非使用Unscoped查询到被软删的数据
f.提供了Begin,Commit,RollBack等方法用于事务;注意tx := db.Begin()时,后续事务操作都要使用tx而不是db;提供了Transaction方法用于自动提交事务,避免用户漏写Commit、RollBack
g.GORM在提供了CRUD的Hook能力。Hook时在创建、查询、更新、删除等操作之前、之后调用的函数。如果任何时候Hook返回错误,GORM将听者后续的操作并回滚事务
h.可以设置SkipDefaultTransaction关闭默认事务,提高运行速度
i.使用PrepareStmst缓存预编译语句可以提高后续调用速度

2.Kitex

Kitex 是字节内部的Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展。
Kitex带有代码生成工具
Kitex服务发现与注册对接了主流的ETCD、NACOS

3.Hertz

Hertz 是字节内部的 HTTP 框架,参考了其他开源框架的优势,结合宇节跳动内部的需求,具有高易用性、高性能、高扩展性特点。
Hertz提供参数路由、通配路由,路由优先级为:静态路由 > 命名路由 > 通配路由
Hertz提供Bind、Validate、BindAndValidate用于参数绑定和校验【转化为结构体】
Hertz中间件分为客户端中间件、服务端中间件
Hertz也有代码生成工具
Hertz高性能:
a.网络库Netpoll,在小包场景下性能优于标准库
b.JSON编码Sonic
c.使用sync.Pool复用对象协议层数据解析优化