Go语言框架三件套 | 青训营笔记

85 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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}

b43b02f5146f40bdbf56915968448d16_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.webp

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是什么 继续加油!