这是我参与「第五届青训营」笔记创作活动的第5天。
本文重点内容
- Go 三个框架概述
- Gorm部分操作介绍
课程内容详解
概述
- Gorm ORM框架
- Kitex 字节RPC
Kitex[kaɪt’eks] 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择
- Hertz 字节HTTP框架
Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
一个Hertz示例项目的结构图:
Gorm
GORM Guides | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
官方声明Gorm的一部分特性:
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
基础使用
Create创建一条数据用结构体指针,多条数据用切片First查一条数据,传递指针,可以查询主键或者条件.Model().Update()更新.Model().Updates()更新,结构体不能更新0值,要用map.Delete()- 模型定义 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
数据库支持
连接到数据库 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
DSN的理解:
本文小结
- Go 三个框架概述
- Gorm部分操作介绍
参考资料与引用
Github库
- go-gorm/gorm: The fantastic ORM library for Golang, aims to be developer friendly (github.com)
- cloudwego/kitex: Go RPC framework with high-performance and strong-extensibility for building micro-services. (github.com)
- cloudwego/hertz: Go HTTP framework with high-performance and strong-extensibility for building micro-services. (github.com)