Go框架三件套详解 | 青训营

193 阅读4分钟

Go框架三件套详解(Web/RPC/ORM)

Gorm:拥有非常丰富的开源扩展
Kitex:Golang微服务RPC框架,高性能,可扩展性强,支多协议并拥有丰富的开源扩展
Hertz:HTTP框架,高易用性,高性能,高扩展性

Gorm的基本使用

GORM是Go语言中的一种ORM(对象关系映射)库,全名是"Go Object Relational Mapping"。它的目标是简化Go应用程序与关系型数据库之间的交互,使开发者能够使用面向对象的方式操作数据库,而无需编写复杂的SQL语句。

使用ID的字段作为主键

创建一个对象时传递的是结构体,传递多个对象时传递的是切片 list

需要传递指针

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

使用default来设置默认值gorm:"default:*****"

使用clause.OnConflict处理数据冲突

使用First查询数据若没有查询到则会返回ErrRecordNotFound

使用Find查询多个数据,若没有找到则不会返回错误

使用结构体作为查询条件

使用结构体更新时只会更新非零值,若需要更新零值则使用Map或Select

gorm.DeleteAt为软删除,数据不会真正从数据库中删除,而是无法通过正常的方式查询到,但可以通过Unscoped查找

Gorm事务:Begin Rollback Commit transaction方法用于自动提交事务

Gorm Hook:在创建 删除 查询 更新等操作之前、之后自动调用,若出错则停止后续操作并回滚

Kitex

Kitex(KiteX)是一个基于Golang的高性能RPC框架,旨在帮助开发者构建分布式应用程序。它提供了强大的网络通信能力,支持高并发和低延迟的服务通信。Kitex是由字节跳动开发并开源的,它具有以下特点和功能:

  1. 高性能:Kitex专注于提供高性能的RPC通信,采用异步、非阻塞的设计,具有出色的吞吐量和低延迟。
  2. 多协议支持:Kitex支持多种传输协议,包括TCP、HTTP、HTTP2,以及自定义协议。这使得它适用于不同的应用场景和网络环境。
  3. 服务治理:Kitex提供了服务注册、服务发现和负载均衡等服务治理功能,以便有效管理和维护服务的可用性和稳定性。
  4. 多语言支持:Kitex不仅支持Golang开发的服务端,还提供了多种语言的客户端实现,如Java、Python等,使得跨语言服务通信变得容易。
  5. 可插拔的编解码器:Kitex允许开发者使用自定义的编解码器,以便在不同的场景中进行优化,提高数据传输效率。
  6. 支持中间件:Kitex支持中间件,可以在请求处理过程中添加自定义逻辑,如鉴权、监控等。
  7. 灵活的路由机制:Kitex提供灵活的路由机制,使开发者能够根据自己的需求定义RPC路由规则。
  8. 可观测性:Kitex内置了监控和追踪功能,可以方便地获取关于服务性能和健康状态的信息。
  9. 易用性:Kitex提供了友好的API和文档,使开发者能够快速上手并构建高效的分布式应用。

使用IDL定义服务与接口,约定发送和接受双方的协议

服务默认监听8888端口

目前Ketix的服务注册与发现已经对接了主流的服务注册和发现中心

定时更新,删除

Hertz基本使用

服务监听8080端口并注册一个Get方法的路由函数

注册路由:GET POST PUT DELETE ANY

提供路由组(Group)的能力,支持路由分组功能

静态路由>命名路由>通配路由

进行参数绑定和校验:Bind Validate BindAndValidate

Hertz的中间件分为客户端中间件和服务端中间件 有通用逻辑时使用中间件

Hertz性能:网络库Netpoll Jason编解码 使用Syn.pool复用对象协议层解析优化