这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
前言
go框架中的web层框架herz、rpc框架和orm框架gorm。目前正在读gorm文档。
Go 框架三件套详解(Web/RPC/ORM)
环境搭建部分
搭建课程所需要的开发环境以及安装需要用到的软件。
学习如何安装 Docker/Postman/Git/Golang
-
安装 Minikube 或 Docker Desktop 用于使用 Docker 安装教程
- 可以使用 Minikube 或者使用 Docker Desktop 启动 Docker
-
安装 Postman
-
安装 Git 安装教程
-
安装 Go(Golang >= 1.15) 安装教程
框架体验部分
提前体验一下课程涉及的 HTTP/RPC/ORM 框架
HTTP 框架 Hertz 初体验
通过阅读 www.cloudwego.io/zh/docs/her… 尝试运行 Hertz 的示例代码
- Hertz 框架地址: github.com/cloudwego/h…
Hertz使用
没看懂这个和kitex干嘛的……
Hertz生态
RPC 框架 Kitex 初体验
通过阅读 www.cloudwego.io/zh/docs/kit… 尝试运行 Kitex 的示例代码
- kitex 暂时没有针对 Windows 做支持,如果本地开发环境是 Windows 建议使用 WSL2
- KItex 框架地址: github.com/cloudwego/k…
Kitex服务注册与发现
干嘛用的?
Kitex生态
维护多套测试环境使用XDS扩展很舒适 推荐体验一下
ORM 框架 Gorm 初体验
通过阅读 gorm.cn/docs/#Insta… 尝试运行 Gorm 的示例代码
- Gorm 框架地址: github.com/go-gorm/gor…
Gorm的基本使用
- 如下图,Gorm的使用就是框架进行数据库的crud操作
-
不太懂更新操作中,更新多个字段的两种做法跟零值非零值有什么关系
-
Gorm中的默认约定
- 使用名为ID的字段作为主键;
- 使用结构体的蛇形复数作为表名;e.g. 如果结构体名为User,那么表名就是users;像上图中的TableName接口可以重定义表名;
- 字段名的蛇形作为列名;同理可以在结构体中使用gorm tag来重定义列名
- 使用CreatedAt和UpdateAt字段作为创建、更新时间
备注:蛇形命名法是每一个单词均是小写开头并将单词间的空格替换为 _ 的命名方法。
Gorm的CRUD
- Gorm连接数据库
- Gorm创建数据
- Gorm更新数据
- Gorm删除数据
-
Some tips
- Gorm是链式调用(不太懂),所以会对传入的结构体参数做出sql语句调用后的改变,同时返回gorm对象,该对象可以记录sql语句调用的一些信息,比如sql执行的err或者查询结果的数量等;
- Gorm提供软删除策略;
- 如果在执行sql性质的接口前加入传入了使用TableName的结构体作为参数的接口,那么可以不用显示使用model接口去传入结构体转换到要操作的表名。在update接口中一般传入的参数是要修改的列和修改的值,没有传入结构体也就没有表名信息,所以需要调用model();
- 在执行sql性质的接口后加入任何接口的都是无效的,只能在前面加入起到拼接sql语句的作用;
- 关于零值的修改,貌似只能使用map或者使用select接口指定列;
Gorm事务
- 提供了begin、commit、rollback;
- 提供了Transaction用于自动提交事务,避免用户漏写commit和rollback;
- 提供了curd的hook能力;
- gorm会对写操作默认开启事务,降低性能,如果同时也没有设置hook,可以加入Skip Default Transaction参数关闭事务;同时还有PrepareStmt参数缓存预编译语句提高性能;
Gorm生态
实战项目
总结
其它知识
- 了解一下什么IDL以及IDL的语法
- 了解一下什么是 opentracing 以及 etcd
Etcd 与 Opentracing 是什么
IDL 是什么
- 了解 IDL 是什么 zh.m.wikipedia.org/zh-hans/%E6…
- Thrift IDL 语法 thrift.apache.org/docs/idl
- proto3 IDL 语法 developers.google.com/protocol-bu…
问题
- rpc服务和http服务啥区别 http就是管路由的吗建立url和函数之间的映射关系?
http服务是最上游对外提供api的调用,依次向下调用rpc client,然后rpc client调用rpc server,最后rpc server调用orm框架,完成对数据库的操作。
基本上大单体项目使用orm和http框架即可,但是可以把能被复用的服务拆出来形成rpc服务调用,跟微服务有关系
- Thrift protobuf 是什么?协议?