go语言三件套 | 青训营

70 阅读3分钟

image-20230807201511654.png

Gorm

支持防止sql注入

基本使用

image-20230807201958206.png

db.Find也可以查找,且效果更好

image-20230807202318122.png

这是应用程序用来请求与 ODBC 数据源连接的名称。 换句话说,它是一个表示 ODBC 连接的符号名称。 连接到 ODBC 时,它会存储连接详细信息,例如数据库名称、目录、数据库驱动程序、UserID、密码等。

创建数据

image-20230807203038540.png

可以定义结构体struct来对应数据库,使用gorm来作为提示,primarykey表示主键,column表示列名,default表示默认值

db是链式调用

clause.OnConflict{DoNoting:true} 表示遇到冲突的时候什么都不做

查询数据

image-20230807204408302.png

有零值的话用map来作为查询条件

更新数据

image-20230807204716642.png

update只能更新一个列,updates可以更新多个列(用map或者是结构体)

如果使用Select的话 只会更新select选中的字段

update支持正则

删除数据

image-20230807205127256.png

物理删除:删除之后数据就找不到了

image-20230807205345954.png

软删除:设置一个字段表示这个数据是否被删除,需要用gorm.DeleteAt进行标识,会记录删除时间

image-20230807205425882.png

事务

image-20230807205558275.png 开始事务的时候一定要返回对象tx 方便后续使用

要同时操作的 操作放在db.Begin() 和 tx.Commit中

判断较多,每次都得写rollback 所以改进

image-20230807205900887.png 直接用db.Transaction包起来就可以了

Hook

image-20230807210042872.png 默认hook是开启的 性能有些影响

性能提高

image-20230807210246615.png

GORM生态

image-20230807210327286.png

KiteX

RPC工具

image-20230807214621971.png

IDL

image-20230807214812675.png

IDL是一种很有用的工具,它提供了对接口的描述,约定了接口协议。使得通讯双方通讯时,无需再发送 scheme,有效提高了通讯数据的荷载比。

但对于RPC框架而言,IDL又不仅仅是一个接口描述语言。对于市面上绝大多数的RPC框架而言,IDL还是一个工具和一种使用过程,专指根据 IDL 描述文件,用指定的开发语言,生成对应的服务端接口模块,和客户端程序。这样的好处是,便于开发者快速开发。

服务注册与发现

注册

image-20230807220454603.png client从注册中心获取数据 内部实现负载均衡算法,速度要比多层代理快

用etcd扩展之后使用server(newserver的时候需要把HelloImpl注入,然后传递etcd对象),经过main中的代码 服务就被注册到etcd中了

发现

image-20230807221405978.png hello.MustNewClient用来找到注册的对应的服务

kitex会加一道缓存 和 异步更新对象 异步删除对象的逻辑(不用担心对象失效的问题)

生态

image-20230807222302517.png

Hertz

基本使用

image-20230807222353325.png go的http框架

server.Default 默认集成了recover中间件,而server.New没有

h.Spin 开启自悬:会一直保持连接状态,不会往下执行了 就保持在这一行

hertz有两个上下文:传递元信息、处理请求信息

路由

基本

image-20230807223207130.png

路由组

image-20230807223245059.png 参数路由和通配路由

image-20230807223318249.png

参数绑定

image-20230807223430399.png 将请求信息中的信息与struct绑定,分别用query path header等进行标识

vd标识校验

注意 BindAndValidate中需要传递指针,因为没有返回值,所以需要用指针就数据绑定到Args中

中间件

image-20230807223750742.png 使用Use来使用定义好的中间件

Client

image-20230807223948437.png

dst可以手动传入字节数据 在开发时将数据放入就不需要频繁申请内存

IDL

image-20230807224043871.png 可以生成服务端代码和客户端代码

image-20230807224311708.png

性能

网络库 netpoll

性能由于标准库

不支持https 需要切换到标准库

json编码 sonic
sync.Pool复用对象协议层数据解析优化

生态

image-20230807224633784.png