GO框架三件套 | 青训营笔记

116 阅读2分钟

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

一、本堂课重点内容:

  • 三件套(Gorm、Kitex、Hertz)

二、详细知识点介绍:

1.背景

  • Gorm,是一个已经迭代10年+的功能强大的ORM框架,在字节内部被广泛使用并功能强大
  • Kitex,是字节内部Golang微服务RPC框架,具有高性能、强可拓展的特点
  • Hertz,是字节内部的HTTP框架,具有高易用性、高性能、高拓展性特点

2.Gorm

  • ORM(Object Relational Mapping),对象关系映射
  • Gorm可以进行连接数据库,创建数据,查询数据,更新数据,删除数据等功能
  • Gorm目前支持MySQL、SQLServer、PostgreSQL、SQLite

如何使用默认值? 通过使用default标签为字段定义默认值

type User struct {
   ID int64
   Name string `gorm:"default:galenone"`
   Age int64 `gorm:"default:18"`
}

使用clause.OnConflict处理数据冲突

p:=&Product{Code:"D42",ID:1}
db.Clauses(clause.OnConflict{DoNothing: true}).Create(&p)

注意用First获取第一条记录(主键升序),查询不到数据时会返回ErrRecordNotFound

使用Find查询多条数据时,查询不到数据不会返回错误

当使用结构体作为条件查询时,GORM只会查询非0子段,这意味着如果您的字段值为0、false或其他零值,该字段不会被用于构建查询条件,使用Map来构建查询条件

Gorm提供了Begin、Commit、Rollback方法用于使用事务

对于写操作(创建、更新、删除),为了确保数据的完整性,GORM会将它们封装在事务内运行,但这会降低性能,你可以使用SkipDefaultTransaction关闭默认事务

使用PrepareStmmt缓存预编译语句可以提高后续调用的速度

2.Kitex

首先需要使用IDL对应服务与接口

如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是怎么样的,这时候就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

使用kitex -module example -service example echo.thrift命令生成代码

3.Hertz

Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由

Hertz提供了路由组(Group)的能力,用于支持路由分组功能

Hertz提供了参数路由和通配路由,路由的优先级为:静态路由>命令路由>通配路由

三、课后个人总结:

其实今天这门课因为不能回看课程,都是参考PPT写的东西,其实还有很懂东西都不是很懂,比如IDL、RPC等,还是需要继续学习

四、引用参考:

第五届字节跳动青训营 Go框架三件套详解