这是我参与「第五届青训营 」伴学笔记创作活动的第3天。
今天的课程内容为:
- Gorm
- gorm介绍
- gorm踩坑总结
- Kitex
- Kitex介绍
- Hertz
- Hertz介绍
- Mock测试
Gorm
Gorm介绍
Gorm是一个已经迭代了10年+的功能强大的ORM框架,在字节跳动内部被广泛使用,同时拥有着非常丰富的开源拓展。
# 安装gorm
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
Gorm官方支持的数据库类型包括:MySQL,PostgreSQL,SQlite,SQL Server。同时,gorm也支持通过自定义驱动来支持其他类型的数据库。
Gorm踩坑总结
-
使用db.Fisrt()方法进行查询数据时,查询为空会返回ErrRecordNotFound,而使用db.Find()进行查询时,查询为空不会返回错误。
-
使用结构体作为条件查询时,gorm会无视"零值",即golang语言中默认的0,"",false等等,这会导致此字段不会用于构建查询条件,如果想要使用零值作为查询条件,需要使用map类型作为查询条件。同理,在更新数据时,也不能通过结构体更新为"零值",需要通过map类型或Select()来更新。
-
gorm提供Transaction()方法用于自动提交事务,用户也可以使用Begin()方法开启事务(需要手动执行Rollback()和Commit()来结束事务)。
Kitex
Kitex介绍
Kitex是字节跳动内部的Golang微服务RPC框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源拓展。
Kitex目前对Windows的支持不够完善。
# 安装kitex
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
# 安装thriftgo
go install github.com/cloudwego/thriftgo@latest
# 验证kitex是否安装成功
kitex --version
# 验证thriftgo是否安装成功
thriftgo --version
kitex支持通过IDL(interface description language)来自动生成代码。
Hertz
Hertz介绍
Hertz是字节跳动内部的HTTP框架,参考了其他开源框架的优势,具有高易用、高性能、高拓展性的特点。
# 安装Hertz
go install github.com/cloudwego/hertz/cmd/hz@latest
Hertz基本使用
- Hertz提供GET、POST、PUT、DELETE、ANY等方法用于注册路由。除此之外Hertz提供了路由组Group的能力,用于支持路由分组功能。Hertz也提供参数路由和通配路由,其中路由的优先级为:静态路由 > 命名路由 > 通配路由。
- Hertz提供Bind、Validate、BindAndValidate等函数用于参数绑定与校验。
- Hertz支持Use()方法来注册中间件。
- Hertz支持通过Hz工具和IDL来自动生成基础服务代码。