Golang web框架Hertz| 青训营笔记

181 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天


现在再来学基础框架有点临时抱佛脚的感觉了。由于直播课没看而且过期了,本篇文章主要记录学习过程中遇到的一些理解,保真不保对。

1. hertz工作过程

以官方示例中的简单示范为例,代码如下:

func main() {
    h := server.Default()

    h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
            ctx.JSON(consts.StatusOK, utils.H{"message": "pong"})
    })

    h.Spin()
}

在main函数中,第一行和最后一行分别是注册一个服务和运行一个服务,这个不必多言,重点是对中间路由函数的理解。

我们看到GET函数中第二个参数为一个函数func,该函数第一个参数为一个context.Context,通过它我们可以方便地对同一个请求所产生地goroutine进行约束管理。第二个参数为*app.RequestContext,在我理解中它人如其名,用于处理请求的内容,并返回请求所需的内容。在GET函数中ctx.JSON,其作用就是返回一个json,第一个参数是状态码,第二个参数就是json具体的内容。

这样一个路由的基本功能就理解完毕了。

2. hz生成的目录结构

由于之前没有啥实践经历,hz生成的目录结构上来就有点懵。但是其并不复杂,在学习了示例代码中的hertz_gorm就大概了解结构的好处了。

首先是main.go里的main函数:

func main() {
	dal.Init()
	h := server.Default()
	register(h)
	h.Spin()
}

中间的register()是同目录main包文件夹里router_gen.go的函数,用于管理分布在不同地方的各种路由。 然后最重要的就是biz文件夹,官方文档里描述为business 层,存放业务逻辑相关流程。这里面内容会很杂,一般会有使用IDL生成结构体和对应的服务,又或是与数据库连接时的数据库模型和逻辑。