这是我参与「第五届青训营」伴学笔记创作活动的第 6 天
前言
本文章记录了Go 语言GORM、Kitex、Hertz框架学习的部分内容,记录了今天所学习的部分知识
1.Gorm
1.1Gorm简介 基于Go语言实现的ORM库和Java里的Mybatis等框架相似。
ORM的概念是:Object-Relationl Mapping, 是将映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。
1.2Gorm的安装 下载
github.com/jinzhu/gorm v1.9.10
go get -u github.com/jinzhu/gorm
1.3GO的基本使用
type User struct {
ID int64 `gorm:"type:bigint(20);column:id;primary_key"`
UserName string `gorm:"type:varchar(5);column:username"`
PassWord string `gorm:"type:varchar(11);column:password"`
CreatedAt time.Time `gorm:"type:datetime(11);column:create_time"`
UpdatedAt time.Time `gorm:"type:datetime(11);column:update_time"`
UserId string `gorm:"type:varchar(255);column:user_id"`
}
func (User) TableName() string {
return "user"
}
func TestDbConnect(t *testing.T) {
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值
LogLevel: logger.Info, // 日志级别为info
IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误
Colorful: true, // 彩色打印
},
)
dsn := "root:MYsql123.@tcp(192.168.61.161:3306)/tiktok_base?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger})
if err != nil {
panic(err)
}
//获取连接池
sqlDB, _ := db.DB()
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
test := &User{
UserName: "demo",
PassWord: "demo",
UserId: "demo",
}
db.Create(test) //添加数据
}
2.Kitex 2.1Kitex简介
Kitex字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择。
2.2框架特点
-
高性能
使用自研的高性能网络库 Netpoll,性能相较 go net 具有显著优势。
-
扩展性
提供了较多的扩展接口以及默认扩展实现,使用者也可以根据需要自行定制扩展,具体见下面的框架扩展。
-
多消息协议
RPC 消息协议默认支持 Thrift、Kitex Protobuf、gRPC。Thrift 支持 Buffered 和 Framed 二进制协议;Kitex Protobuf 是 Kitex 自定义的 Protobuf 消息协议,协议格式类似 Thrift;gRPC 是对 gRPC 消息协议的支持,可以与 gRPC 互通。除此之外,使用者也可以扩展自己的消息协议。
-
多传输协议
传输协议封装消息协议进行 RPC 互通,传输协议可以额外透传元信息,用于服务治理,Kitex 支持的传输协议有 TTHeader、HTTP2。TTHeader 可以和 Thrift、Kitex Protobuf 结合使用;HTTP2 目前主要是结合 gRPC 协议使用,后续也会支持 Thrift。
-
多种消息类型
支持 PingPong、Oneway、双向 Streaming。其中 Oneway 目前只对 Thrift 协议支持,双向 Streaming 只对 gRPC 支持,后续会考虑支持 Thrift 的双向 Streaming。
-
服务治理
支持服务注册 / 发现、负载均衡、熔断、限流、重试、监控、链路跟踪、日志、诊断等服务治理模块,大部分均已提供默认扩展,使用者可选择集成。
-
代码生成
Kitex 内置代码生成工具,可支持生成 Thrift、Protobuf 以及脚手架代码。
引用参考
参考的部分内容来源于以下课程或者网页:
- Go 框架三件套详解(Web/RPC/ORM)
- Kitex Go 微服务 RPC 框架