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

128 阅读2分钟

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

Go框架三件套详解

三件套介绍

1、Gorm

Gorm是一个已经迭代了10年+的功能强大的ORM框架,在字节内部被广泛使用,并且拥有非常丰富的开源扩展。

2、Kitex

Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可扩展性的主要特点,支持多协议并且拥有丰富的开源扩展。

3、Hertz

Hertz是字节内部的HTTP框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点

三件套的使用

Gorm的基本使用

定义Gorm model

type Product struct{
    Code string
    Price uint
}

为model定义表名

func (p Product) TableName() string{
    return "product"
}

数据库操作

func main(){
    //连接数据库
    db,err := gorm.Open(mysql.Open("user:pass@tcp(127.0.0.1:3306)/
        dbname?charset=utf8mb4&parseTime=True&loc=Local"),&gorm.Config{})
    if err != nil{
        panic("failed to connect database")
    }
    //创建数据
    db.Create(&Product{Code:"D42",Price:100})
    //查询数据
    var product Product
    db.First(&product,1)    //根据整形主键查找
    db.First(&product,"code=?","D42")    //查找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目前支持MySQL、SQL server、PostgreSQL、SQLite。
Gorm通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发其他驱动

Kitex

Kitex目前对Windows的支持不完善,如果本地开发环境是Windows,建议使用虚拟机或WSL2。

使用IDL定义服务与接口

如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。这时候,就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样

Hertz

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