这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
三件套介绍
Gorm、Kitex、Hertz的基本用法
Gorm
gorm是Golang语言中一个功能强大、性能极好的ORM框架
ORM:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,
我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
Kitex
Kitex是字节内部Golang微服务RPC框架
具有高性能、强可扩展的主要特点 支持多协议并且拥有丰富的开源扩展
Hertz
Hertz是字节内部的Http框架
参考了其他开源框架的优势 结合字节跳动内部的需求 具有高可用、高性能、高扩展性的特点
三件套使用
Gorm
模型定义
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
Gorm性能提高
使用PrepareStmt缓存预编译语句可以提高后续调用的速度,提高大约35%左右。
db , err := gorm.Open(mysql.Open("username:password@tcp(localhost:9910)/database?charset=utf8"),&gorm.Config{
PrepareStmt: true}
Kitex
安装
Kitex目前对Windows的支持不完善,建议使用虚拟机或WSL2
安装代码生成工具
go install github.com/cloudwego/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
使用
kitex 是 Kitex 框架提供的用于生成代码的一个命令行工具。目前,kitex 支持 thrift 和 protobuf 的 IDL,并支持生成一个服务端项目的骨架。
编写IDL
IDL是什么: Interface Definition Language,接口定义语言
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response echo(1: Request req)
}
编译运行
kitex 工具已经帮我们生成好了编译和运行所需的脚本:
编译:
$ sh build.sh
执行上述命令后,会生成一个 output 目录,里面含有我们的编译产物。
运行:
$ sh output/bootstrap.sh
执行上述命令后,Echo 服务就开始运行了。
编写客户端
有了服务端后,接下来就编写一个客户端用于调用刚刚运行起来的服务端。
首先,同样的,先创建一个目录用于存放我们的客户端代码:
$ mkdir client
进入目录:
$ cd client
创建一个 main.go 文件,然后就开始编写客户端代码了。
首先让我们创建一个调用所需的 client:
import "example/kitex_gen/api/echo"
import "github.com/cloudwego/kitex/client"
...
c, err := echo.NewClient("example", client.WithHostPorts("0.0.0.0:8888"))
if err != nil {
log.Fatal(err)
}
Hertz
- 安装 hz:
go install github.com/cloudwego/hertz/cmd/hz@latest
Hertz路由:
Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由;
提供了路由组Group的能力,用于支持路由分组功能;
提供了参数路由和通配路由,路由的优先级为:静态路由 > 命名路由 > 通配路由
Hertz参数绑定:
Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验;
Hertz中间件:
Hertz的中间件主要分为客户端中间件与服务端中间件;
Hertz Client:
Hertz提供了HTTP Client用于帮助用户发送HTTP请求;
Hertz代码生成工具:
Hertz提供了代码生成工具Hz,通过定义IDL文件即可生成对应的基础服务代码;
总结
学习Gorm/Kitex/Hertz是什么 继续加油!