webook 是一个仿简书的项目 gin
- gorm
- cors
- regex
- bcrypt
- sessions
- redis
- JWT
- sms
- lua脚本
- wire
- mock
- sqlmock
- viper
- etcd
- Zap
- sarama
docker compose up
领域对象domain.User·业务概念 数据库对象dao.User·直接映射到表结构
- 时区问题int64,统一使用UTC0的时区,返回数据才处理 服务器 go应用 数据库
- 唯一索引冲突unique
- Region 使用含糊地区代表
- 联表 使用json代表Addr string或者反向持有uid 为什么使用自增主键?
- 数据库中的数据存储是一个树型结构,自增意味着树朝一个方向增长,id相邻的大概率在磁盘上也是相邻的 ,充分利用操作系统预读机制。 不是自增则意味中间插入数据,页分页
业务规则
- 一个手机号码,一分钟只能发一次,有效时间十分钟(本身系统有限流)
- 验证通过了,不可以再用
- 三次验证失败后,不可以再用
- 验证失败,只提示用户验证码不对,不提示过于频繁的失败原因 业务层上、分布式环境下并发,不是语言层面上的并发,不可以通过channel 或者 sync.lock 检查数据-doingSth 考虑并发安全 使用分布式锁或者lua脚本
分发制作库和线上库,依然MongoDB实现大文本存储,采用雪花算法生成主键,解决MongoDB无法生成自增主键的问题 实现不同的缓存方案管理