这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
一、Gorm
ORM(Object Relational Mapping):对象关系映射
gorm是一个功能强大的orm框架
gorm.Model
- gorm.Model是 GORM的内置结构体,其包括字段
ID、CreatedAt、UpdatedAt、DeletedAt - 可以使用嵌套结构体的方式将其嵌入到自己的结构体中
// gorm.Model 的定义
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
字段标签
- 使用结构体标签,指定更多的字段属性
//结构体
Email string `gorm:"unique;not null"`
Address string `gorm:"type:varchar(152);unique_index"`
Num int `gorm:"AUTO_INCREMENT"`
- Gorm使用名为
ID的字段作为主键
所有字段的零值,都不会保存到数据库内,但会使用它们的默认值。如果想避免这种情况可以使用指针或实现Scanner/Value接口
type User struct{}
...
user:=User{ Name:new(string) } //指针
...
user:=User{ Name:sql.NullString{"",true} } //Scanner/Value
指定表名
func (u User) TableName() string {
return "user_infos"
}
二、Kitex
IDL(Interface Definition Language):接口定义语言,IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流
RPC(Remote Procedure Call):远程过程调用,它是利用网络从远程计算机上请求服务,可以理解为把程序的一部分放在其他远程计算机上执行。通过网络通信将调用请求发送至远程计算机后,利用远程计算机的系统资源执行这部分程序,最终返回远程计算机上的执行结果
KiteX是高性能 RPC 框架
三、Hertz
Hertz 是字节跳动服务框架团队研发的超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。在经过了字节跳动内部一年多的使用和迭代后,如今已在 CloudWeGo 正式开源。目前,Hertz 已经成为了字节跳动内部最大的 HTTP 框架,线上接入的服务数量超过 1 万,峰值 QPS 超过 4 千万。除了各个业务线的同学使用外,也服务于内部很多基础组件,如:函数计算平台 FaaS、压测平台、各类网关、Service Mesh 控制面等,均收到不错的使用反馈。在如此大规模的场景下,Hertz 拥有极强的稳定性和性能,在内部实践中某些典型服务,如框架占比较高的服务、网关等服务,迁移 Hertz 后相比 Gin 框架,资源使用显著减少,CPU 使用率随流量大小降低 30%—60%,时延也有明显降低。