go 框架三件套|青训营笔记

79 阅读2分钟

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

后端编写离不开框架,今天主要学习的内容是go的常用框架,go的三件套包括Gorm,Kitex,Hertz。

gorm 主要用于后端与数据库的连接及一些增删改查和事务的基础的操作

Gorm的基础使用

定义gorm model
    type Product struct{
        Code string
        price vint
    }
为model定义表名
    funcp Product) TableName()string{
          return "product"
          }
 连接数据库
    func main(){
         db,err := gorm.Open(
             mysql.Open(dsn:),&gorm.Config{})
         if err != nil{
             panic(v:)
             }
     }
 增删改查操作
     使用First时,需要注意查询不到数据会返回ErrRecordNotFound,使用find查询多条数据,查询不到数据不会返回错误
     使用结构体作为查询条件时,Gorm只会查询非零值字段
     使用Struct更新时只会更新非零值,如需更新零值可以使用Map更新或使用Select选择字段
     GORM提供了gorm.DeletedAt用于帮助用户实现软删(如需查询可使用Unscoped)

  GORM事务 
      事务包括Begin(开始),Commit(提交),Rollback(回滚)基本方法
      gorm提供了Tansaction方法用于自动提交事务
          

Kitex

定义IDL 
    namespace go api
    
    struct Request{
        1string message
    }
    
    struct Response{
        1string message
    }
    
    service Echo{
        Response echo(1:Request req)
    }

kitex 生成代码
    命令:kitex module example -service example echo.thrift
    build。sh:构建脚本
    kitex_gen:IDL 内容相关的代码生成
    main.go 程序入口
    handle.go 用户在该文件里实现IDL
    service 定义的方法
    
基本使用
    创建Client
        c,err := echo.NewClient("example",client.WithHostPorts("0.0.0.0:8888"))
        if err !=nil {
            log.Fatal(err)
        }
    发起请求
        req := &api.Request{Message:"my request"}
        resp,err := c.Echo(context.Background(),req,callopt.WithRPCTimeOut(3*time.Second))
        if err!=nil{
            log.Fatal(err)
        }
        log.Println(resp)

Hertz

Hertz路由
    Hertz 提供了 GET、POST、PUT、DELETE、ANY等方法用于注册路由
    Hertz 提供了路由组(Group)的能力,用于支持路由分组的功能
    Hertz 提供了参数路由和通配路由,路由的优先级为:静态路由>命名路由>通配路由
    Hertz 提供了Bind、Vaildate、BindAndValidate函数用于进行参数绑定和校验
    
Hertz中间件包括客户端中间件和服务端中间件
Hertz提供了Http Client用于帮助用户发送HTTP请求
Hertz代码生成工具Hz,通过定义IDL文件即可生成对应的基础服务代码
    struct HelloReq{
        1:string Name(api.query="name";
    }
    struct HelloResp{
        1:string RespBody;
    }
    
    service HelloService{
        HelloResp HelloMethod(1:HelloReq request)(api.get="/hello");
    }