这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天,今天学的内容是Go框架三件套:Gorm、Kitex、Hertz。
开发的过程就是掌握工具的过程,对工具的深入理解和熟练使用能够增加我们的开发效率
课堂内容
一、Gorm
在之前Java的学习中,就已经有了对ORM框架的一些知识积累,ORM是为了解决面向对象与关系数据库存在的互不匹配的现象的技术,而Gorm作为Go的迭代了10年+的功能强大的ORM框架,我们务必对它熟练掌握。
假设使用如下命令在Mysql中新建一个表
create table goLearn.product ( code varchar(100) null, price int null );
则在Go中创建映射的方式为创建一个结构体
type Product struct {
Code string
Price uint
}
然后将结构体与Mysql对应表进行绑定
func (p Product) TableName() string {
return "product"
}
之后在main函数体中使用以下函数来建立连接池
db, err := gorm.Open(
mysql.Open("name:passwd@tcp(127.0.0.1:3306)/goLearn?charset=utf8mb4&parseTime=True&loc=Local"),
&gorm.Config{})
连接池建立完成后可使用Gorm提供的函数对数据表进行CRUD。接下来简单介绍一下Gorm提供的一些CRUD函数
db.Create(&Product{"",100}) // 创建一条数据
db.First(&Product,1) //根据传入主键查询一条数据,查询结果放在Product结构体内
db.Model(&Product).Update() //根据Update函数中传入的新的Product结构体变量的参数来修改表数据
db.Delete(&Product,1) // 根据传入主键删除一条数据
其中,老师重点提到了查询数据时可能踩到的坑:使用First函数查询数据时,查询不到数据会返回ErrRecordNotFound;而如果是使用Find函数查询多条数据时,查询不到数据不会返回错误,因此在开发时需要特别注意一些判断条件。
Gorm也提供了Begin、Commit、Rollback方法用于使用事务,同时还提供了Transaction方法用于自动提交事务。
二、Kitex
Kitex是字节内部使用的Golang微服务RPC框架,具有高性能、可扩展的特点。针对Kitex的学习主要以上手coding为主,这里贴上教程Kitex基础教程
三、Hertz
Hertz是字节跳动开发的 HTTP 框架,具有高易用性、易扩展等特点。Hertz 采用了 4 层分层设计,保证各个层级功能内聚,同时通过层级之间的接口达到灵活扩展的目标。整体架构图如图所示。从上到下分为应用层、路由层、协议层、传输层。
与Hertz一起开源的还有一个命令行工具HZ,只需要定义好IDL,HZ就可以genju定义好的接口信息一键生成项目脚手架;同时Hertz还提供了丰富的中间件供我们使用。
后记
对于使用Go语言做高并发web服务器来说,对于Gorm、Kitex、Hertz三大框架的掌握是必不可少的,经过老师上课的介绍,让我对这三大框架有了一定的了解。