# mall **Repository Path**: lszgit/mall ## Basic Information - **Project Name**: mall - **Description**: 基于go-zero的秒杀项目 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-04-05 - **Last Updated**: 2023-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, go-zero ## README # 基于go-zero的校园商城 # 服务设计 商品服务 第三方服务 认证服务 订单服务 # 笔记 ## 什么是跨域? `跨域`指的是浏览器不能执行其他网站的脚本。它是浏览器同源策略造成的,是浏览器对js施加的安全限制 `同域策略`:是指协议,域名,端口都相同,其中一个不同都会产生跨域问题 什么是预检请求? `需预检的请求`要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。 "预检请求“的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。 ## 常见日志级别 ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 设置日志级别后,只有级别高于或等于该级别的才会正常输出 ## 冗余字段问题 冗余字段,减少关联查询的次数, 但会带来新的问题:冗余字段与实际表的数据不一致的问题,所以在更新时需要特殊处理,特殊处理用事务保证数据一致性 ## Object划分 po : 持久对象 do: 领域对象, 与业务有关的抽象 to: 不同应用之间传输的对象 dto: 类似to vo: 值对象,视图对象,前端提交过来的数据 ## 分布式锁 redis实现 两点注意保证加锁和解锁的原子性,我们使用lua脚本做 不要释放别人的锁,所以我们给key一个uuid ## md5 加盐 只用md5的话,彩虹表破解 解决方案:加盐,但是需要存盐值 更好的解决方案: bcrypt.GenerateFromPassword bcrypt.CompareHashAndPassword ## session问题 和 分布式session session共享问题 1. session复制 缺点: session同步占用大量网络带宽, 占用大量存储空间 n个服务器n份 2. 客户端存储 缺点:大小有限制,不安全 3. 负载均衡 设置hash一致性 缺点: 服务器重启数据丢失, 不易于水平拓展服务器 4. 统一存储 缺点: 比基于内存的存储要慢 指定域名为父域名 # 遇到的bug + Goland 2021.3 对 .pb.go 的解析有错误,并非生成代码错误 + 指针类型 var 声明了,没有初始化,导致的空指针error + go zero 操作数据库 err = c.conn.QueryRowsCtx(ctx, &res, query) 第二个参数 空接口, 一开始没写取地址符号,导致报无效地址的错误 + 血的教训 2022年4月15日,sql查询结果映射结构体的一个字段写错, 导致2个多小时没找到错误原因 其实这种错误很常见,也很难避免,但是盘查错误的效率太低了 首先,有bug先看error,把该打印的error打印出来,就会很快定位bug log! log! log! log error! log error! + Scan error on column index 1, name “created_at“: unsupported Scan, storing driver.Value type []uint8 问题就是在查出数据映射到实体是出现问题: time相关的字段映射失败 解救有方案:在创建连接的地址后面添加 ?parseTime=true + # todo 分布式session 关联属性分组和属性 根据属性分组获取基本属性 批量删除【属性-属性】关系 获取某个属性分组没有关联的属性 # done 登录功能: auth ---> memberRpc ---> db 注册功能: auth 校验手机验证码,验证成功则调用memberRpc,插入新用户数据 插入新用户信息前校验手机号是否注册 发送短信验证码: 验证码防刷(value 上截一个时间戳), 验证通过thirdparty rpc 发送验证码, redis保存(phone,code*时间戳) 15min 获取商品详情信息 新增品牌与分类关联关系 冗余字段一致性问题