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

110 阅读2分钟

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

这节课主要对Go框架得三件套进行了详解,包括Web、RPC、ORM,所以学习内容主要包括以下三个方面:

  • Http框架Hertz的初体验

Hertz 是一个超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。

Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景中,相较于 go net,Hertz 在 QPS、时延上均具有一定优势。

在内部实践中,某些典型服务,如框架占比较高的服务、网关等服务,迁移 Hertz 后相比 Gin 框架,资源使用显著减少,CPU 使用率随流量大小降低 30%—60% 。

New 是引擎的构造函数,可以新建一个 Engine 实例并且不会包含默认的配置,但可以自己自定义相关的配置,在构造好后会将实例返回出去。

示例如下:

// New creates a hertz instance without any default config. func New(opts ...config.Option) *Hertz { options := config.NewOptions(opts) h := &Hertz{ Engine: route.NewEngine(options), } return h }

  • RPC框架Kitex的初体验

KiteX 是 bytedance 开源的高性能 RPC 框架,实现了高吞吐、高负载、高性能等居多特性,具体请看 KiteX 的实践,文章介绍多传输协议、消息协议时,说到 KiteX 支持的协议类型:Thrift、Protobuf 等。

在 RPC 框架中,服务端与客户端通信的前提是远程通信,但这种通信又存在一种关联,那就是通过一套相关的协议(消息、通信、传输等)来规范,但客户端又不用关心底层的技术实现,只要定义好了这种通信方式即可。

在 KiteX 中,也提供了一种生成代码的命令行工具:kitex,目前支持 thrift、protobuf 等 IDL,并且支持生成一个服务端项目的骨架。

  • ORM框架Gorm的初体验

Gorm是由Golang写的,GitHub上活跃度很高的orm库它的特点;

全功能ORM

关联(包含一个,包含多个,属于,多对多,多种包含);

Callbacks(创建/保存/更新/删除/查找之前/之后);

预加载;

事务

复合主键

SQL Builder

自动迁移

日志

可扩展,编写基于GORM回调的插件

每个功能都有测试

开发人员友好

小结

本节课主要对Go框架的三件套有了粗浅的认识,后续还要继续总结和学习,希望能够继续有所收获。