这是我参与「第五届青训营 」伴学笔记创作活动的第3天。
一、本堂课重点内容
主要了解了Go 框架三件套————Gorm,Kitex,Hertz,熟悉了是三个框架的基础用法以及使用过程中的一些注意事项。
二、详细知识点介绍
Gorm框架
Gorm是一个功能强大的ORM框架,拥有非常丰富的开源拓展。Gorm目前支持MySQL,SqlServer,rostgresql,sqlite。Gorm通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用或自行开发驱动。
gorm model:创建一个结构体定义gorm model。它对应了数据库中的一张表,结构体中的属性对应了表中的字段。需要注意的是,当结构体中定义了名为ID的属性时,此属性会被数据库默认为主键。在没有进行说明时,字段名的蛇形作为表的列名。
gorm提供了TableName()接口,实现该接口为model定义表名。(如果没有定义该方法,会使用结构体的蛇形负数作为表名)
gorm.Open():用于通过传入对应数据库的驱动连接数据库,同时可以传入gorm.Config{}对数据库进行一些配置。
创建数据:
使用res := db.Create(结构体实例的指针),可以创建一条记录,res.Error获取err。
创建多条记录时,则传入对应结构体指针为元素的数组地址。 可以使用clause.OnConflict处理数据冲突。
查询数据:
查询第一条数据:db.First(结构体实例的指针),如果查询不到数据则返回报错信息。
查询多条数据:users := make([]* User,0) , result := db.where(筛选条件).Find(&users),result.RowsAffected为找到的记录数,result.Error为错误信息。
更新数据:
更新单个列:db.Model(&User{ID:111}).Where(条件).Update(column,value)。
更新多个列:db.Model(&User{ID:111}).Where(条件).Updates(User{[属性名,value],[……]})。
更新选定字段:db.Model(&User{ID:111}).Select(字段名).Updates(User{[属性名,value],[……]})。
删除数据:
物理删除:db.Where(条件).Delete(&User{}),物理删除会将数据从数据库中真正删除。
软删除:首先需要在结构体中加Default gorm.DeletedAt用于帮助用户实现软删除。此时当调用delete时,记录不会被从数据库中真正删除,但对应的数据的DeletedAt会被置为当前时间,及删除时间,并且无法通过正常查询方法找到该数据。使用Unscoped可以查询到被软删除的数据。
Kitex框架。
Kitex是Golang微服务RPC框架,具有高性能、强拓展性,支持多协议并且拥有非常丰富的开源拓展。
IDL:使用IDL定义服务与接口。在进行RPC时,我们需要知道接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。而IDL的作用,就是定义双方的协议。
Kitex生成代码:
build.sh:构建脚本;
kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码;
main.go:程序入口;
handler.go:用户在该文件里实现IDL service定义的方法。
Hertz框架
Hertz是一种HTTP框架,参考了其他开源框架的优势,具有高易用性、高性能、高扩展性特点。
Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由。
Hertz提供了路由器(Group)的能力,用于支持路由分组的功能。
Hertz提供了参数路由和通配路由,路由的优先级为:静态路由>命名路由>通配路由。
Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验。
Hertz的中间件主要分为客户端中间件和服务器端中间件。
Hertz提供了HTTP Client用于帮助用户发送HTTP请求。
三、实践练习例子
笔记项目
一个使用Hertz、Kitex、Gorm搭建出来的具备一定业务逻辑的后端API项目。主要分为三个项目模块:demoapi,实现用户登录注册机对笔记的增删改查;demouser,实现用户的增删改查;demonote,实现对笔记的增删改查。该项目分别使用Kitex完成RPC框架构建、Hertz完成HTTP框架构建、Gorm完成ORM框架构建。
四、课后个人总结
经过本堂课的学习,我对Hertz、Kitex、Gorm的相关知识和基础用法有了一定的了解,通过对实战案例中的项目的分析和对代码的学习,也让我对这三个框架有了更加深入的感悟。