Go框架三件套详解(Web/RPC/ORM) | 青训营笔记

74 阅读1分钟

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

三件套:

Gorm, Kitex, Hertz

Gorm

迭代了十余年的ORM框架

gorm.cn/zh_CN/docs/…

//Gorm基本使用

type Product struct{
    Code string
    Price uint
  }//定义gorm model,对应数据库一张表

func (p Product)TableName() string{//为model定义表名
      return "product"    //返回表名
  }

func main() {
    //link to database
    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")
        }

    //Create data创建数据
    db.Create(&Product{Code: "D42",Price: 100})

    //read查询数据
    var product Product
    db.First(&product,1)    //按整型主键查找,传指针;First查询单挑数据
    db.First(&product,"code=?","D42")//查询code字段值为042的

    //更新Product的price为200
    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"})//可更新零值,用map更新

    //delete删除product
    db.Delete(&product,1)
}

Gorm的约定:

Gorm使用ID的字段为主键

使用的结构体的蛇形负数为表名

字段名的蛇形作为列名

使用CreatedAt, UpdatedAt字段为创建更新时间

Gorm支持的数据库

MySQL, SQL server,PostgreSQL,SQLite

连接SQLServer为例

import (
    "gorm.io/driver/sqlserver"
    "gorm.io/gorm"
)

dsn :="sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
db ,err :=gorm.Open(sqlserver.Open(dsn),&gorm.Config{})

//Goem通过驱动连接数据库,如果连接其他类型的,可复用/自行开发驱动


Kitex

字节跳动内部Golang微服务RPC框架: 高可用性, 强可扩展能力


Hertz

字节内部HTTP框架