技术学习总结 (四)| 青训营

195 阅读3分钟

前言

本章阐述的是一些关于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

image.png

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。

image.png

Gorm Hook

GORM在提供了CURD的Hook能力。 Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。 如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。

image.png

Gorm生态

GORM 拥有非常丰富的扩展生态,以下列举一部分常用扩展。

image.png

小结

这节课是学习了关于Go框架三件套的知识,这些都是框架的衍生品,是无数人耗尽时间打造出来的成品,里面充斥着无数人的心血,这些知识都学得很浅,只是皮毛,还需要更多精力来钻研这个玩意,所谓一通百通,道理都是一样的。