这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。
主要是学习了Go框架三件套Gorm、Kitex、Hertz,理解了三者的主要操作和功能。
- Gorm - ORM框架
- Kitex - Golang微服务RPC框架
- Hertz - HTTP框架
一、Grom
DB操作
创建数据
Upsert - clause.OnConflict 处理数据冲突
default 定义默认值
查询数据
First 查询不到会返回错误,而find不会
更新数据
Struct 只能更新非零值,可以使用Map或Select更新零值
删除数据
物理 Delete & 软 gorm.DeletedAt
Unscoped可以查询到被软删的数据
事务
Begin、Commit、Rollback
Hook
性能提高
SkipDefaultTransaction、PrepareStmt
二、Kitex
代码生成工具
IDL定义服务与接口
服务注册与发现
三、Hertz
基本操作
路由(静态>命名>通配)
客户端&服务端中间件
问:如何终止中间件的执行?
- c.Abort
- c.AbortWithMsg
- c.AbortWithStats
IDL
为用户提供了HTTP Client 用于帮助用户发送HTTP请求
性能:网络库Netpoll、Json编解码Sonic、sync.Pool复用对象
实战
笔记项目是利用Go框架三件套搭建起来的后端API项目
api:
用户登录、注册,用户创建、更新、删除、查询笔记;
user:
创建、查询、校验用户;
note:
创建、更新、删除、查询笔记;
调用关系是:
调用方 通过 HTTP 调用api
api 根据
- 操作用户数据proto - user 或 操作笔记数据thrift - note 进行服务注册 - 进而调用 mySQL
- 或 直接服务发现
到达 ETCD
作业
阅读官方问答熟悉更多用法:
在本地运行笔记项目,思考在之后的大项目中使用Go框架三件套Gorm/Kitex/Hertz
思考:大项目是完成极简版的抖音,首先要像笔记项目确定有哪些API服务,user基本相同,视频包括收藏、点赞、评论是属于另一类的api,可以取名audience;然后定义IDL,再实现数据管理。