type
status
category
date
slug
summary
tags
password
icon
项目遇到的问题以及解决
📝 主旨内容
创建并发表一篇文章,详情页面会no data
在文章详情中,本应该有文章内容、标题以及阅读、点赞、收藏数量。具体业务逻辑是用
errgroup.Group开启的两个go协程分别去查文章和查交互数据。debug打断点分析定位到错误是db的record not found,文章有数据,但是交互无数据。解决思路:
在查交互数据这张表返回无记录记错返回到repo时,在err≠nil之前加一段条件,if err==
dao.ErrRecordNotFound 返回
kafka
将查询接口耦合的增加阅读数接口使用kafka解耦,在将生产-消费模型修改为批量消费,批量提交优化后出现问题,刷新一次文章页面,本来阅读计数应该+1。数据库表中记录值正确,但是redis中计数没有更新
解决思路:
这里我们通过表更新成功,redis更新失败,可以明确生产者和消费者没有错误,检查redis的增加计数lua脚本没有问题,通过看日志打断点,看到更新redis的错误是context canceled,并且我们更新缓存操作是开一个goroutine完成后续更新逻辑的,所以我们就定位到了错误点在于新的协程应该不应该继续使用之前的ctx了,因为db更新一完成,在return前就会defer cancel(),而这就导致redis操作来不及更新了,所以异步更新的场景最好使用新的ctx
wire
使用wire实现依赖注入,碰到err
runtime error: invalid memory address or nil pointer dereference
很少碰到这个err,一开始debug分析不出来,后面定位到是repo的问题,甚至在repo层没有执行业务逻辑就panic了。
始化service没有传入repo导致runtime error- 作者:Guxi8086
- 链接:https://Guxi8086.com/article/1-41
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
