这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
1. Gorm
强大的ORM框架
支持的数据库:MySQL/SQLServer/PostgreSQL/SQLite
思考1:能不能自己写个GORM连接其他数据库的驱动(?)(比如Redis)
链式调用(责任链模式):直到调用立即方法之前都不会产生查询
1.1 CRUD
创建
查询
-
比较
First和Find:First:获取第一条数据(主键升序),查询不到会返回ErrRecordNotFoundFind:查询多条数据,查询不到会返回空数组,不会返回错误
更新
- 比较使用
Struct和使用Map:Struct:只会更新非零值- `Map``:可以更新零值
删除
- 物理删除
- 软删除:
- 添加一个
gorm.DeletedAt字段 - 使用
Unscoped找到被软删除的记录
- 添加一个
1.2 GORM事务
强一致性要求需要使用事务,GORM提供了Begin Commit Rollback方法用于事务
开始事务
固化链接
tx := db.Begin()
之后使用tx(tx是transaction的缩写)而非db,这样使用的就是同一个链接
Transaction:GORM提供了Transaction方法用于自动提交事务,避免用户漏写Commit Rollback
1.3 GORM HOOK
1.4 GORM性能提高
- 使用
SkipDefaultTransaction关闭默认事务 - 使用
PrepareStmt缓存预编译语句来提高后续调用的速度
1.5 GORM生态
2. Kitex
安装 字节内部微服务RPC框架
- Install Kitex:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest. - Install thriftgo:
go install github.com/cloudwego/thriftgo@latest
然而我却得到了报错信息:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest: open /bin/kitex: operation not permitted
于是我在网上搜索解决方案,首先我看到stackoverflow上有人说是GOPATH的问题,于是我又在~/.zshrc把GOPATH/bin export了一遍,
export GOPATH=~/go
export PATH=$GOPATH/bin:$PATH
但依然报错; 最终我在这个三哥的视频里找到了答案:这就是mac os的一个隐私设置问题,需要在设置里手动对终端开启完全磁盘访问权限
之后重启终端,就没有问题啦~
我又参考了这个问答,发现这本质上是mac os的SIP(Security Integrity Protection,系统完整性保护)机制,保护系统进程、文件、文档不被其它进程修改
SIP技术主要分为文件系统保护,运行时保护,内核扩展签名。文件系统保护主要是通过沙盒机制限制root权限;运行时保护,主要就是保护关键进程无法被进程代码注入,挂调试器以及内核调试等;内核扩展签名,所有的第三方kext必须被安装到/Library/Extensions,并强制使用签名
关闭SIP的办法如下:
- 重启电脑,按住
Command+R(直到出现苹果标志)进入Recovery Mode(恢复模式) - 左上角菜单里找到
实用工具 -> 终端 - 输入
csrutil disable回车
3. Hertz
字节内部HTTP框架
参考资料