Go框架三件套详解 | 青训营笔记

44 阅读2分钟

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

此笔记的主要内容如下

  • 课程介绍(包括三件套介绍)
  • 三件套使用
  • 实例案例介绍

课程介绍

三件套介绍

Gorm,ORM框架

Kitex,Golang微服务RPC框架

Hertz,HTTP框架,结合了其他开源框架的优势

三件套使用

Gorm的基本使用

定义Gorm Model

type Product struct {
    Code string
    Price uint
}

连接数据库:GORM通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动。

db, err := gorm.Open(mysql.Open(), &gorm.Config{})
if err != nil {

}

创建数据 db.Create(&Prodect{Code: "1", Price: 100})

不处理冲突创建一条数据 db.Clauses(clause.OnConclict{DoNothing: true}).Create(&Product{Code : "1", Price: 100})

查询数据

var product Product
db.First(&product, 1)  // 根据整型主键查找
db.First(&product, "code = ?", "1")  // 查找 code 字段值为 1 的记录

更新数据 db.Model(&product).Update("Price", 200)

GORM事务

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

// 开始事务
tx := db.Begin()
// 在事务中执行一些db操作
if err := tx.Create(&User(Name:"name")).Error; err != nil {
    //遇到错误,回滚
    tx.Rollback()
    return
}
// 提交事务
tx.Commit()

GORM提供了Transaction方法用于自动提交事务,避免用户漏写Commit、Rollback

if err = db.Transaction(func(tx *gorm.DB) error {
    if err = tx.Create(&User{Name:"name"}).Error; err != nil{
        //遇到错误
        return err
    }
    return nil
}); err != nil {
    return
}
Kitex基本使用
Hertz基本使用

使用Hertz实现,服务监听8080端口并注册一个GET方法的路由函数

h := server.Default(server.WithHostPorts("127.0.0.1:8080"))
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
    ctx.JSON(consts.StatusOK, utiil.H{"ping": "pong"})
})
h.Spin()
Hertz路由

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

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

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

参数路由是 :version 通配路由是 *action 通过Param()去获取

Hertz参数绑定

Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验

Hertz中间件

Hertz的中间件主要分为客户端中间件与服务端中间件

什么场景下需要使用中间件?比如 打日志 计算接口耗时 信息的设置和传递

Hertz Client

Hertz提供了HTTP Client用于帮助用户发送HTTP请求

Hertz代码生成工具

Hertz提供了代码生成工具Hz,通过定义IDL文件即可生成对应的基础服务代码