go三大框架 | 青训营笔记

48 阅读2分钟

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

今日学习

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

详细知识

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

gorm

GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server


import (   "gorm.io/driver/mysql"   "gorm.io/gorm" )  func main() {   // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情   dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) }

作者是中国人,中文文档齐全,对开发者友好,支持主流数据库。

全功能 ORM

关联 (拥有一个,拥有多个,属于,多对多,多态,单表继承)

Create,Save,Update,Delete,Find 中钩子方法

支持 Preload、Joins 的预加载

事务,嵌套事务,Save Point,Rollback To to Saved Point

Context、预编译模式、DryRun 模式

批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD

SQL 构建器,Upsert,锁,Optimizer/Index/Comment Hint,命名参数,子查询

复合主键,索引,约束

自动迁移

自定义 Logger

灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…

每个特性都经过了测试的重重考验

开发者友好

kitex

Kitex 诞生于字节跳动大规模微服务架构实践,面向的场景自然是微服务场景,因此下面会先介绍微服务的特点,方便开发者深入理解 Kitex 在其中的设计思考。

  • RPC 通信模型

微服务间的通信通常以 PingPong 模型为主,所以除了常规的吞吐性能指标外,每次 RPC 的平均时延也是开发者需要考虑的点。

  • 复杂的调用链路

一次 RPC 调用往往需要多个微服务协作完成,而下游服务又会有其自身依赖,所以整个调用链路会是一个复杂的网状结构。

在这种复杂调用关系中,某个中间节点出现的延迟波动可能会传导到整个链路上,导致整体超时。当链路上的节点足够多时,即便每个节点的波动概率很低,最终汇聚到链路上的超时概率也会被放大。所以单一服务的延迟波动 —— 即 P99 延迟指标,也是一个会对线上服务产生重大影响的关键指标。