这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记。 课程目标
- 了解 Go 的 Database/SQL的实现
- 了解 GORM 的实现原理、使用简单
- 以及如何基于 GORM 做一些定制化开发
1. 理解 database/sql
1.1 基本用法
- 使用driver + DSN 初始化 DB 连接
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello")
- 执行一条SQL,通过rows取回返回的数据;处理完毕,需要释放链接
rows, err := db.Query("select id, name from users where id=?", 1) if err != nil {// xxx} defer rows.Close()
1.2 设计原理
2. GORM 使用简介
2.1 背景知识
设计原则:API精简、测试优先、最小惊讶、灵活扩展、无疑赖、可信赖 功能完善:
- 关联
- 事务
- 多数据库、读写分离、命名参数、...
- 字段权限
- 代码生成、符合主键
3. GORM 设计原理
3.1 Sql是怎么生成的
3.2 插件时怎么工作的
灵活定制
自由扩展
多租户
多数据库、读写分离
加解密
3.3 ConnPool是什么
最佳实践
- 数据序列化sql表达式
- 批量数据操作
- 代码复用、分库分表
- 混沌工程、压测 5.LOoger/trace 6.Migrator 7.Gen代码生成 8 安全