框架使用与实战|青训营笔记

96 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第五天,本次课程介绍了Go的三大框架,其中orm框架理解比较清楚,另外两个的理解不是太深刻,先把笔记写下吧。

框架使用与实战

框架使用

Gorm

gorm框架(数据库)

  • 基本使用

  • 定义gorm model 表名

    • image.png
    • model即为结构体,其中内容即为字段
    • TableName()为grom默认接口
  • 连接数据库

    • image.png
    • dsn为数据库相关信息,&gorm.config()为配置信息
  • 创建数据

    • db.create()
      • db.create(&对象1)//创建一个数据1的数据
      • db.create(slice[])//创建多条数据
      • db.create()返回的也是Gorm对象,利用res.Error获取错误信息
  • 数据冲突

    • 利用clause.OnConflict处理冲突
      • image.png
    • create,update,delete为调用sql语句执行,到此终止。
  • 利用gorm tag实现主键定义,确定列名,设定默认值等

    • 定义主键 gorm:"primarykey"
    • 定义列名 gorm:"Column:列名"
    • 设定默认值 gorm:"default:默认值"
  • 查询数据

    • first 只能查询单条数据
      • image.png
      • 按主键升序的顺序获得第一条数据
      • 查询不到返回ErrRecordNotFound
    • find可以查询多条数据
      • image.png
      • 查询不到不会返回错误,而返回空数组
    • 结构体作为查询条件时,如果你的字段为0,false,""或其他零值不会用于构造条件,可以使用map来对0条件的设定
  • 更新数据

    • 单列更新
      • db.Model(&model).where(条件).Updates("column":列名,value)
    • 多列更新
      • db.Model(&model1).Updates(Product{price:200,Code:"123"})//使用结构体更新仅更新非0字段
      • db.Model(&model1).Updates(Product{price:200,Code:""})//使用结构体更新仅更新非0字段
    • 利用map更新
      • db.Model(&model1).Updates(map[string]interface{}{price:200,code:F42})
      • db.Model(&User(ID:111)).Select("name").Updates(map[string]interface{}{name:"hello","age":18,actived:false//0值条件)
        • 相当于 UPDATE users SET name="hello" Where id=111
    • SQL表达式更新
      • image.png
  • 删除

    • 物理删除
      • delete
        • db.delete(&model,主键:n)
        • db.delete(&model,条件)
        • db.where("name Like ?",值)。Delete()//?是占位符,和printf类似
    • 软删除
      • DeletedAt
      • 在创建model时加入字段 Deleted gorm.DeletedAt
      • 软删除后,正常查询无法查询到,DeletedAt 置为当前时间
      • 使用Unscoped可以查询到软删除数据
  • 事务

    • 提供了 Begin,Commit,Rollback方法方便使用事务
    • image.png
    • 建议使用image.png
  • Hook

    • 创建,查询,更新,删除等操作之前,之后自动调用的操作,若hook后返回错误,GORM会停止后续操作并回滚事务
  • 性能提高

    • 关闭默认事务 SkipDefaultTransaction
    • 使用PrepareStmt 进行预编译
  • 相关工具

    • image.png
  • 约定:

    • Gorm默认使用ID字段作为主键
    • 结构体的蛇形负数作为表面
    • 字段的蛇形作为列明
    • CreatedAt,UpdateAt 字段作为创建,更新时间
  • 支持数据库 MySQL,SQLServer,PostgreSQL,SQLlite

  • DSN :image.png

Kitex

RPC框架

  • 安装代码生成工具
  • image.png
  • IDL
    • 利用IDL定义服务与接口
    • 定义IDL
      • image.png
      • kitex -moudule example -service emample echo.thrift //生辰代码
      • build.sh 构建脚本
      • kitex_gen:IDL内容相关的生成代码,基础的server/client代码
      • main.go 入口文件
      • handler, 在该文件中实现IDL service 定义的方法
      • image.png
    • 生态
      • image.png

Hertz

HTTP框架 - Hertz实现 监听端口并注册一个Get路由函数 - image.png - 路由注册 - image.png - 路由优先级 - 静态路由>命名路由>通配路由 - 参数绑定 - 将HTTP请求中的参数转入结构体 - 用于绑定的校验的参数 - Bind - validate - BindAndValidate - Go tag 用于绑定参数 - vd 实现校验 - image.png - 中间件不是很明白,后期学习后补正 - Client - image.png - 代码生成工具HZ - 定义IDL 生成服务端和客户端代码