Gorm
支持防止sql注入
基本使用
db.Find也可以查找,且效果更好
这是应用程序用来请求与 ODBC 数据源连接的名称。 换句话说,它是一个表示 ODBC 连接的符号名称。 连接到 ODBC 时,它会存储连接详细信息,例如数据库名称、目录、数据库驱动程序、UserID、密码等。
创建数据
可以定义结构体struct来对应数据库,使用gorm来作为提示,primarykey表示主键,column表示列名,default表示默认值
db是链式调用
clause.OnConflict{DoNoting:true} 表示遇到冲突的时候什么都不做
查询数据
有零值的话用map来作为查询条件
更新数据
update只能更新一个列,updates可以更新多个列(用map或者是结构体)
如果使用Select的话 只会更新select选中的字段
update支持正则
删除数据
物理删除:删除之后数据就找不到了
软删除:设置一个字段表示这个数据是否被删除,需要用gorm.DeleteAt进行标识,会记录删除时间
事务
开始事务的时候一定要返回对象tx 方便后续使用
要同时操作的 操作放在db.Begin() 和 tx.Commit中
判断较多,每次都得写rollback 所以改进
直接用db.Transaction包起来就可以了
Hook
默认hook是开启的 性能有些影响
性能提高
GORM生态
KiteX
RPC工具
IDL
IDL是一种很有用的工具,它提供了对接口的描述,约定了接口协议。使得通讯双方通讯时,无需再发送 scheme,有效提高了通讯数据的荷载比。
但对于RPC框架而言,IDL又不仅仅是一个接口描述语言。对于市面上绝大多数的RPC框架而言,IDL还是一个工具和一种使用过程,专指根据 IDL 描述文件,用指定的开发语言,生成对应的服务端接口模块,和客户端程序。这样的好处是,便于开发者快速开发。
服务注册与发现
注册
client从注册中心获取数据 内部实现负载均衡算法,速度要比多层代理快
用etcd扩展之后使用server(newserver的时候需要把HelloImpl注入,然后传递etcd对象),经过main中的代码 服务就被注册到etcd中了
发现
hello.MustNewClient用来找到注册的对应的服务
kitex会加一道缓存 和 异步更新对象 异步删除对象的逻辑(不用担心对象失效的问题)
生态
Hertz
基本使用
go的http框架
server.Default 默认集成了recover中间件,而server.New没有
h.Spin 开启自悬:会一直保持连接状态,不会往下执行了 就保持在这一行
hertz有两个上下文:传递元信息、处理请求信息
路由
基本
路由组
参数路由和通配路由
参数绑定
将请求信息中的信息与struct绑定,分别用query path header等进行标识
vd标识校验
注意 BindAndValidate中需要传递指针,因为没有返回值,所以需要用指针就数据绑定到Args中
中间件
使用Use来使用定义好的中间件
Client
dst可以手动传入字节数据 在开发时将数据放入就不需要频繁申请内存
IDL
可以生成服务端代码和客户端代码
性能
网络库 netpoll
性能由于标准库
不支持https 需要切换到标准库