这是我参与「第五届青训营 」笔记创作活动的第4天。三件套是Go开发常用的组合框架,具体指:Gorm,Kitex,Hertz。
Gorm是比较常用的ORM框架,使用方法如下:
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解决可能的冲突。
查询数据方法:
- 内置函数查询。First()函数查不到东西会返回ErrRecordNotFound,Find查多条数据,查不到不返回错误。
- 结构体查询。Gorm只会查询非零字段。使用Map来构建带有零字段的查询条件。
同理,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等主流服务注册中心,注册方式如下。
Hertz:一个用于提供路由方法的项目,提供GET,POST,ANY,DELETE,PUT等方法注册路由。提供路由组(Group)用于分组。Hertz的路由优先级:静态路由>命名路由>通配路由。中间件:服务端,客户端。
作为一个提供路由机制的内容,Hertz提供HTTP.Client帮助客户发送HTTP请求。代码基础服务工具Hz可通过定义IDL生成对应的基础服务代码。
上述三件套配合使用,可以较好地帮助Go语言开发,如下图技术栈:
总而言之,熟悉三件套的使用,对后续项目开发将起到非常大的帮助。