深入Go 语言,了解Go的三件套 | 青训营笔记

79 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 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 消息协议默认支持 ThriftKitex ProtobufgRPC。Thrift 支持 Buffered 和 Framed 二进制协议;Kitex Protobuf 是 Kitex 自定义的 Protobuf 消息协议,协议格式类似 Thrift;gRPC 是对 gRPC 消息协议的支持,可以与 gRPC 互通。除此之外,使用者也可以扩展自己的消息协议。

  • 多传输协议

    传输协议封装消息协议进行 RPC 互通,传输协议可以额外透传元信息,用于服务治理,Kitex 支持的传输协议有 TTHeaderHTTP2。TTHeader 可以和 Thrift、Kitex Protobuf 结合使用;HTTP2 目前主要是结合 gRPC 协议使用,后续也会支持 Thrift。

  • 多种消息类型

    支持 PingPongOneway双向 Streaming。其中 Oneway 目前只对 Thrift 协议支持,双向 Streaming 只对 gRPC 支持,后续会考虑支持 Thrift 的双向 Streaming。

  • 服务治理

    支持服务注册 / 发现、负载均衡、熔断、限流、重试、监控、链路跟踪、日志、诊断等服务治理模块,大部分均已提供默认扩展,使用者可选择集成。

  • 代码生成

    Kitex 内置代码生成工具,可支持生成 ThriftProtobuf 以及脚手架代码。

引用参考

参考的部分内容来源于以下课程或者网页: