这是我参与「第五届青训营 」笔记创作活动的第15天。
一、本堂课重点内容:
将前面几节课所学到的知识应用到项目中,掌握Hertz/Kitex/Gorm的基本用法。通过学习实战案例,可以使用Hertz/Kitex/Gorm完成日常后端开发任务。
二、详细知识点介绍:
(1)课程介绍
Gorm是一个已经迭代了10年的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。
Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展。
Hertz是字节内部的HTTP框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点。
(2)三件套的使用
Gorm使用名为ID的字段作为主键,使用结构体的蛇形负数作为表名,字段名的蛇形作为列名,使用CreatedAt,UpdatedAt字段作为创建、更新时间。
Gorm提供了CURD的Hook能力,Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。
Kitex使用IDL定义服务与接口,如果我们要进行RPC,就需要知道双方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。这时候,就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。目前Kitex的服务注册与发现已经对接了主流的服务注册与发现中心,如ETCD,Nacos等。
使用Hertz实现,服务监听8080端口并注册了一个GET的路由函数。Hertz提供了GET,POST,PUT,DELETE,ANY等方法用于注册路由。Hertz提供了路由组的能力,用于支持路由分组的功能。Hertz提供了代码生成工具Hz,通过定义IDL(interface description language)文件即可生成对应的基础服务代码。
(3)实战案例介绍
笔记项目是一个使用Hertz/Kitex/Gorm搭建出来的具备一定业务逻辑的后端API项目。分为三个模块:API服务,用户数据管理,笔记数据管理。技术框架包括:GO,MYSQL,ETCD,KITEX,GORM,HERTZ。
(4)课程总结
了解Hertz/Kitex/Gorm是什么,熟悉Hertz/Kitex/Gorm的基础用法,通过实战案例分析三个框架的使用串联了起来。
三、实践练习例子:
import (
"context"
"fmt"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
type Test struct {
A string
B string
}
func main() {
h := server.Default()
h.StaticFS("/", &app.FS{Root: "./", GenerateIndexPages: true})
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
ctx.JSON(consts.StatusOK, utils.H{"ping": "pong"})
})
h.GET("/json", func(c context.Context, ctx *app.RequestContext) {
ctx.JSON(consts.StatusOK, &Test{
A: "aaa",
B: "bbb",
})
})
h.GET("/redirect", func(c context.Context, ctx *app.RequestContext) {
ctx.Redirect(consts.StatusMovedPermanently, []byte("http://www.google.com/"))
})
v1 := h.Group("/v1")
{
v1.GET("/hello/:name", func(c context.Context, ctx *app.RequestContext) {
fmt.Fprintf(ctx, "Hi %s, this is the response from Hertz.\n", ctx.Param("name"))
})
}
h.Spin()
}
四、课后个人总结:
Hertz 从上到下分为:应用层、路由层、协议层和传输层,每一层各司其职,同时公共能力被统一抽象到公共层(Common),做到跨层级复用。另外,同主库一同发布的还有作为子模块的 Hz 脚手架,它能够协助使用者快速搭建出项目核心骨架以及提供实用的构建工具链。