前言
本章阐述的是一些关于Go框架三件套(Web/RPC/ORM)的一些总结,相当于把前几节课的知识应用到项目中,进一步掌握Hertz/Kitex/Gorm的基本用法,通过一些实战案例,可以熟练地掌握三件套运用于后端项目开发任务。
三件套介绍
- Gorm:是一个已经迭代了10年+的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。
- Kitex:是字节内部的 Golang微服务RPC框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展。
- Hertz:是字节内部的HTTP框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点。
Gorm的使用
由于篇幅有限,这里只介绍关于Gorm框架的一些知识
Gorm是基于ORM的框架,相当于企业专属,企业内部广泛用于项目开发。
Gorm的约定(默认):
- Gorm使用名为ID的字段作为主键
- 使用结构体的蛇形负数作为表名
- 字段名的蛇形作为列名
- 使用CreatedAt、UpdatedAt字段作为创建、更新时间
这些相当于一些约束,约定俗成嘛,但是也不是必须遵守的,毕竟你违反这个规则代码也能执行,只是一个形式而已,或许这就是身为码农一点仪式感吧。
本来尝试数据库的搭建以前用的是SQL server,那还是用Java做web开发的时候,由于那时候安装数据库踩了不少坑,所以后面转用MySQL了,可视化工具用的是navicat,说到这个我就不得不推荐一下了,这玩意界面清爽,并且兼容市面上绝大多数数据库,唯一一点是它是付费的,不过对于在座的来说,这些都是小问题。
GORM目前支持MySQL、SQLServer、PostgreSQL、SQLite。
GORM通过驱动来连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动。
然后就是数据库的增删改查了,这些内容我在GORM(Go 的 ORM 库)连接数据库 | 青训营 - 掘金 (juejin.cn)都详细说了,请有需求的同学自行移驾。
Gorm事务
Gorm提供了Begin、Commit、Rollback方法用于使用事务。
db,err := gorm.Open(mysql.Open( dsn: "username:password@tcp(localhost:9910)/database?charset=utf8"),&gorm.Config{])
if err != nil {
panic( v: "failed to connect database" )}
tx := db.Begin() //开始事务
//在事务中执行一些db操作(从这里开始,您应该使用'tx'而不是 'db' )
if err = tx.create(&User{Name: "name"}).Error; err != nil {
tx.Rollback()
}
//遇到错误时回滚事务return
if err = tx.Create(&User{Name: "name1"]).Error; err != nil {
tx.Rollback()
return
}
//提交事务
tx.Commit()
Gorm提供了Tansaction方法用于自动提交事务,避免用户漏写Commit、Rollbcak。
Gorm Hook
GORM在提供了CURD的Hook能力。 Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。 如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。
Gorm生态
GORM 拥有非常丰富的扩展生态,以下列举一部分常用扩展。
小结
这节课是学习了关于Go框架三件套的知识,这些都是框架的衍生品,是无数人耗尽时间打造出来的成品,里面充斥着无数人的心血,这些知识都学得很浅,只是皮毛,还需要更多精力来钻研这个玩意,所谓一通百通,道理都是一样的。