Go语言框架三件套(Web/RPC/GORM)|青训营笔记

68 阅读6分钟

一、ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。 GORM:是Golang语言中一款性能极好的ORM库。

二、GORM的基本使用 Gorm的约定(默认) Gorm使用名为ID的字段作为主键 使用结构体的蛇形负数作为表名 字段名的蛇形作为列名 使用CreatedAt、UpdatedAt字段作为创建、更新时间

三、GORM支持的数据库 Gorm目前支持MySQL、SQLServer、PostgreSQL、SQLLite。 GormGorm通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动。 DSN是 Data Source Name 的缩写,是一种数据库连接字符串,它提供了连接数据库所需的所有信息。DSN 的格式通常包括数据库类型、数据库名称、用户名、密码和连接地址等信息

四、GORM创建数据 如何使用Upsert? 使用clause.OnConflict处理数据冲突。 如何使用默认值? 通过使用default标签为字段定义默认值

五、GORM查询数据 First的使用踩坑 使用First时,需要注意查询不到数据会返回ErrRecordFound。 使用Find查询多条数据,查询不到数据不会错误。 使用结构体作为查询条件 当使用结构作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为0、"、false或其他零值,该字段不会被用于构建查询条件,使用Map来构建查询条件。

六、GORM更新数据 使用Struct更新时,只会更新非零值,如果需要更新零值可以使用Map更新或使用Select选择字段。

七、GORM删除数据 GORM提供了gorm.DeletedAt用于帮助用户实现软删除,拥有软删除能力的Model调用Delete时,记录不会被从数据库中真正删除。但GORM会将DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。使用Unscoped可以查询到被软删除的数据。

八、GORM事务 Gorm提供了Begin、Commit、Rollback方法用于使用事务 Gorm提供了Tansaction方法用于自动提交事务,避免用户漏写Commit、Rollback。

九、GORM HOOK GORM在提供了CURD的HOOK能力 HOOK是在创建,查询,更新,删除等操作之前、之后自动调用的函数 如果任何HOOK返回错误,GORM将停止后续的操作,将回滚事务

十、GORM性能提高 对于写操作(创建、更新、删除),为了确保数据的完整性,Gorm会将它们封装在事务内运行。但是这样会降低性能,可以使用SkipDefaultTransaction关闭默认事务。 使用PrepareStmt缓存预编译语句可以提高后续调用的速度。

十一、Kitex是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点

1.RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,远程调用就像本地过程调用(即业务处理、计算任务等)一样而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。

2.定义 IDL IDL (Interface Definition Language) 是指接口定义语言,是用于描述远程过程调用(RPC)或对象请求代理(ORP)接口的语言。 IDL 中定义了远程对象的接口,其中包括方法名称、参数类型和返回值类型等信息。这些信息可以用于生成代码来实现远程调用。常见的 IDL 标准有 CORBA 和 Microsoft COM/DCOM。 www.cloudwego.io/zh/docs/kit…

十二、Hertz 是字节跳动服务框架团队研发的超大规模的企业级微服务 HTTP 框架,具有 高易用性、易扩展、低时延 等特点

1.Hertz 从上到下分为:应用层、路由层、协议层和传输层,每一层各司其职,同时公共能力被统一抽象到公共层(common),做到跨层级复用。另外,同主库一同发布的还有作为子模块的 Hz 脚手架,它能够协助使用者快速搭建出项目核心骨架以及提供实用的构建工具链。

2.应用层是和用户直接交互的一层,提供丰富易用的 API,主要包括 Server、Client 和一些其他通用抽象。Server 提供了注册 HandlerFunc、Binding、Rendering 等能力;Client 提供了调用下游和服务发现等能力;以及抽象一个 HTTP 请求所必须涉及到的请求(Request)、响应(Response)、上下文(RequestContext)、中间件(Middleware)等等。Hertz 的 Server 和 Client 都能够提供中间件这样的扩展能力。

3.路由层负责根据 URI 匹配对应的处理函数。Hertz构造了路由树,用户在注册路由时拥有很高的自由度:支持静态路由、参数路由的注册;支持按优先级匹配。

4.协议层负责不同协议的实现和扩展。 Hertz 支持协议的扩展,用户只需要实现下面的接口便可以按照自己的需求在引擎(Engine) 上扩展协议,同时也支持通过 ALPN 协议协商的方式注册。

5.传输层负责底层的网络库的抽象和实现。 Hertz 支持底层网络库的扩展。Hertz 原生完美适配 Netpoll,在时延方面有很多深度的优化,非常适合时延敏感的业务接入。

6.Hertz 中间件 Hertz 除了提供 Server 的中间件能力,还提供了 Client 中间件能力。用户可以使用中间件能力将通用逻辑(如:日志记录、性能统计、异常处理、鉴权逻辑等等)和业务逻辑区分开,让用户更加专注于业务代码。Server 和 Client 中间件使用方式相同,使用 Use 方法注册中间件,中间件执行顺序和注册顺序相同,同时支持预处理和后处理逻辑。 www.cloudwego.io/zh/docs/her…