Day5 Go框架三件套详解(Web/RPC/ORM) | 青训营笔记

249 阅读2分钟

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

1. Gorm

强大的ORM框架

支持的数据库:MySQL/SQLServer/PostgreSQL/SQLite

思考1:能不能自己写个GORM连接其他数据库的驱动(?)(比如Redis)

image.png 链式调用(责任链模式):直到调用立即方法之前都不会产生查询

1.1 CRUD

创建

查询

  • 比较FirstFind

    • First:获取第一条数据(主键升序),查询不到会返回ErrRecordNotFound
    • Find:查询多条数据,查询不到会返回空数组,不会返回错误

更新

  • 比较使用Struct和使用Map
    • Struct:只会更新非零值
    • `Map``:可以更新零值

删除

  • 物理删除
  • 软删除:
    • 添加一个gorm.DeletedAt字段
    • 使用Unscoped找到被软删除的记录

1.2 GORM事务

强一致性要求需要使用事务,GORM提供了Begin Commit Rollback方法用于事务

开始事务

固化链接

tx := db.Begin()

之后使用tx(txtransaction的缩写)而非db,这样使用的就是同一个链接

Transaction:GORM提供了Transaction方法用于自动提交事务,避免用户漏写Commit Rollback

1.3 GORM HOOK

1.4 GORM性能提高

  • 使用SkipDefaultTransaction关闭默认事务
  • 使用PrepareStmt缓存预编译语句来提高后续调用的速度

1.5 GORM生态

image.png

2. Kitex

安装 字节内部微服务RPC框架

  1. Install Kitex: go install github.com/cloudwego/kitex/tool/cmd/kitex@latest.
  2. 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的问题,于是我又在~/.zshrcGOPATH/bin export了一遍,

export GOPATH=~/go 
export PATH=$GOPATH/bin:$PATH

但依然报错; 最终我在这个三哥的视频里找到了答案:这就是mac os的一个隐私设置问题,需要在设置里手动对终端开启完全磁盘访问权限

image.png 之后重启终端,就没有问题啦~

我又参考了这个问答,发现这本质上是mac os的SIP(Security Integrity Protection,系统完整性保护)机制,保护系统进程、文件、文档不被其它进程修改

SIP技术主要分为文件系统保护,运行时保护,内核扩展签名。文件系统保护主要是通过沙盒机制限制root权限;运行时保护,主要就是保护关键进程无法被进程代码注入,挂调试器以及内核调试等;内核扩展签名,所有的第三方kext必须被安装到/Library/Extensions,并强制使用签名

关闭SIP的办法如下:

  1. 重启电脑,按住 Command+R (直到出现苹果标志)进入 Recovery Mode (恢复模式)
  2. 左上角菜单里找到 实用工具 -> 终端
  3. 输入 csrutil disable 回车

3. Hertz

字节内部HTTP框架

参考资料

  1. youtu.be/wSO02YvnYLg
  2. stackoverflow.com/questions/4…
  3. stackoverflow.com/questions/3…
  4. OSX SIP机制的“那些事”