这是我参与「第五届青训营 」伴学笔记创作活动的第 五 天
- Hertz:HTTP框架
- GORM:持久层框架
- Kitex:RPC框架
Hertz初体验
🤔既然有Gin框架为什么又使用Hertz框架?
📎我认为Gin框架相当于单体项目并不适用于大型的集群项目。这并不是既生Spring Boot何生Spring Could,事实上如果仅仅开发一个低并发小项目使用Gin框架就足以满足业务需求,但是如果使用Gin框架开发海量并发的服务,单体项目不可能满足业务需求,这也意味着需要将服务拆分为微服务,使用微服务开发又需要加入服务发现注册中心以及RPC服务,这时候使用Gin框架还能满足这些需求吗?不嫌麻烦确实可以,但是性能呢?开发效率呢?项目后期维护呢?显然只满足于Gin框架开发,并不是一个明智的选择。因此Hertz框架会是Go web微服务开发框架的一个不错选择。
🤔Go微服务框架中Hertz优势在哪?
CloudWeGo:
Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
Hertz如何开始上手?
- 定义IDL
- 使用kitex生成代码
- 填充生成代码,添加业务逻辑
- 编译运行
GORM
GORM类似于MyBatis,同是ORM框架。GORM是一个已经迭代了10年+的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源拓展。
基本使用
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
//定义gorm model
type Product struct {
gorm.Model
Code string
Price uint
}
//为model定义表名
func (p Product) TableName() string{
return "product"
}
func main() {
//连接数据库
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 插入
db.Create(&Product{Code: "D42", Price: 100})
// 查询
var product Product
db.First(&product, 1) // find product with integer primary key
db.First(&product, "code = ?", "D42") // find product with code D42
// 更新
db.Model(&product).Update("Price", 200)
// 批量更新
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零字段
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// 删除
db.Delete(&product, 1)
}
GORM约定
- 默认使用名为
ID的字段作为主键; - 默认使用结构体的蛇形复数作为表明;modelName:product -> tableName:products
- 默认使用字段的蛇形复数作为列名;
- 默认使用使用CreatedAt、UpdatedAt字段作为创建、更新时间。
GORM踩坑:
-
First
- 使用First时,需要注意查询不到数据会返回ErrRecordNotFound;
- 建议:使用Find查询多条数据,查询不到数据返回空数组并不会返回错误。
-
使用结构体作为查询条件
- GORM只会查询非零值字段,即字段值为
0、false或者其他零值,改字段不会被用于构建查询条件; - 建议:使用Map来创建查询条件,更新等操作同理。
- GORM只会查询非零值字段,即字段值为
更多GORM知识👈
Kitex
Kitex是字节内部高性能、强可拓展的微服务RPC框架,可以定制扩展治理体系。Kitex内置一个同名代码生成器kitex,可以编写IDL文件使用代码生成器快速生成CRUD代码。
⚠️Kitex 在 v0.4.0 版本已支持在 Windows 环境下编译运行了。但代码生成工具暂未支持 Windows 环境。安装WSL2启用并安装Linux的Ubuntu发行版所需功能。