Go语言三件套 | 青训营笔记

105 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第4天。三件套是Go开发常用的组合框架,具体指:Gorm,Kitex,Hertz。

Gorm是比较常用的ORM框架,使用方法如下:

image.png

一些默认约定: - 使用名为ID的字段作为主键 - 使用结构体的蛇形负数作为表名 - 字段名的蛇形作为列名 - 使用CreatedAt,UpdatedAt字段作为创建,更新时间

Gorm目前可以支持MySQL,SQL Server,PostgreSQL,SQLite。Gorm中创建数据如下,可以用default为字段定义默认值:

type User struct{
    ID int64
    Name string `gorm:"default:galeone"`
    Age int64 `gorm:"default:18"`
}

创建一条数据:

p=&User{Name:"Amy", Age:24, ID:785}
do.Clauses(clause.OnConflict{DoNothing:True}).create(&p)

clause.OnConflict解决可能的冲突。

查询数据方法:

  1. 内置函数查询。First()函数查不到东西会返回ErrRecordNotFound,Find查多条数据,查不到不返回错误。 image.png
  2. 结构体查询。Gorm只会查询非零字段。使用Map来构建带有零字段的查询条件。

image.png

同理,struct只能更新Gorm非零字段,需要零值则要Map或Select选择字段。 删除:物理删除Delete(),软删除gorm.DeleteAt(仍可以用Unscope查到)。 Gorm还提供Begin,Commit,RollBack方法用于事务。Tansaction则可以自动提交事务(防止Commit,RollBack漏写)。 Gorm还包含一些缓存优化,Hook机制。

kitex:代码生成工具。基于RPC,使用IDL定义服务与接口。生成代码的命令为:

kitex -module example -service example echo.thrift

支持自动监听8888端口。 创建Client: echo.newClient("example",client.WithHostPorts("0.0.0.0:8888")) 发起请求 Echo(context.Background(),req,callopt.WithRPCTimeout(3*Time.Second)) kitex注册可以对接ETCD等主流服务注册中心,注册方式如下。

image.png

Hertz:一个用于提供路由方法的项目,提供GET,POST,ANY,DELETE,PUT等方法注册路由。提供路由组(Group)用于分组。Hertz的路由优先级:静态路由>命名路由>通配路由。中间件:服务端,客户端。

作为一个提供路由机制的内容,Hertz提供HTTP.Client帮助客户发送HTTP请求。代码基础服务工具Hz可通过定义IDL生成对应的基础服务代码。

上述三件套配合使用,可以较好地帮助Go语言开发,如下图技术栈:

image.png

总而言之,熟悉三件套的使用,对后续项目开发将起到非常大的帮助。