Go 框架三件套(Web/RPC/ORM) | 青训营笔记

108 阅读3分钟

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

一、重点内容:

  • 本次主要学习了go框架三件套,分别是ORM框架Gorm、RPC框架Kitex和HTTP框架Hertz。

二、详细知识点介绍:

  1. ORM框架
  • “ ORM,即 Object-Relational Mapping (对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
  • Gorm是一个为Go语言打造的方便开发者的ORM库。 目前支持MySQL,SQLServer,SQlite等。它可以通过驱动来连接数据库,需要dsn。
  • 注意,在使用中间件删除时尽量用软删除,不用物理删除。GORM提供DeletedAt实现软删除,使用Unscoped可以查询到被软删除的数据。
  • 其余内容可以参考手册:gorm.cn/docs/#Insta…
  1. RPC框架
  1. HTTP框架
  • HTTP框架主要实现网络传输协议,让开发者可以方便地快速写出正确的代码而不用具体的了解底层的协议知识。
  • Hertz是一种具有高易用性、高性能、高扩展性、多协议支持且具备网络层切换能力的HTTP框架,通过扩展,也可以方便地实现一些功能。
  • 参考资料:hertz/README_cn.md at develop · cloudwego/hertz (github.com)

三、实践练习例子:

  • 通过Hertz实现快速地上手demo
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()
}

四、课后个人总结:

  • 该课程进一步拓展了我的视野。作为一个后端小白,接触各类框架的概念极大地拓展了我的认识,让我意识到真正地开发是怎样进行地,而不是拘泥于传统的基础知识。

  • 课上两小时,课后两星期确实不是闹着玩的,学习的内容很多,时间很紧,需要自己课后花费更多的时间去熟悉。

  • 很多东西更多的只是一个概念,如何把概念落到实处就是我们最后使用的各种中间件。光会用其实作用不大,更重要的还是要去了解底层的相关知识,一步步拓展自己的知识面。