这是我参与「第五届青训营 」伴学笔记创作活动的第5天
1、课程主要内容
- 课程目标介绍,对三件套Gorm、Kitex、Hertz的介绍;
- 三件套的使用,Gorm、Kitex、Hertz的基本使用方法与常见API讲解;
- 实战案例介绍,实战项目功能介绍、实战项目关键代码讲解;
- 课程总结;
2、详细知识记录
第一部分
- Gorm是一个已经迭代了10多年的强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展;
- Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展,对接了常见的服务注册与发现的注册中心;
- Hertz是字节内部的HTTP框架,参考了其他开源框架的优势,结合内部需求,具有高易用性、高性能、高扩展性等特点;
第二部分
- gorm model对应的就是数据库的一张表,字段就是对应表中的字段。只要为结构体定义一个tablename的接口,返回string类型,返回的字符串就是表名,这就是个约定。
- First只能更新一条;调用.model是为了传递表明,调用.table也是但是传了一个字符串;使用结构体只能更新非零值,更新零值的时候要用map;
- Gorm的默认约定,使用名为ID的字段作为主键,使用结构体的蛇形负数作为表明,字段名作为列名;
- Gorm是通过驱动的方式连接数据库的,目前支持Mysql、SQLserver、postgreSQL、SQLite;DSN的具体格式;
- Gorm创建数据,创建一条和创建多条;使用clause.OnConflict处理数据冲突;通过使用default标签为字段定义默认值;
- Gorm查询数据,first API和find API,前者查询不到会返回notfound,会导致问题,后者会返回空数组不会返回error,更多使用多条数据的find;复杂的查询,in、like、and
- Gorm更新数据,db.model().where(条件).update查询单个列,使用结构体或者map更新多个列,前后都使用结构体user就不用调用where;用selec更新选定的字段;
- Gorm删除操作,分为物理删除和软删除,实际开发中使用后者,Gorm提供了软删方案使用DeletedAT字段类型,结构体赋予软删能力;软删后变成update删除时间,find时也会自动跳过软删数据。使用unscoped查询被软删的数据;
- 链式调用,使用where等操作实际上时ping SQL,而使用read,update,delete这些再追加条件则不生效了,而且返回要用一个res接住,再使用res;
- Gorm事务保证数据一致性,提供了begin、commit、rollback使用事务,使用db.begin开启事务后要用一个tx接住,然后下文使用tx固化链接而不是用连接池
- Kitex目前对windows的支持不完善,如果在windows环境使用要安装虚拟机或者wsl2,只能在windows运行代码而不能生成代码;
- 使用IDL定义服务与接口,如果进行rpc就需要知道对方的接口是做什么,需要传什么参数,也需要知道返回值是什么样的,这时候就需要用IDL来约定双方的协议