上班突然爆出一个Bug,业务执行失败,翻遍了elk都没找到错误在哪。
最后发现有些查询数据库的地方,没有判断err,随后加上。
err里面是context cancel!
oh my god,这不是父协程死掉了嘛,然后把孩子都cancel了。
继续定位。
原来函数用了Grpc进行调用,Grpc会立即返回消息,所以函数的主协程也就关掉了,上下文就没有了。
解决办法:
子协用context.Background(),作为协程根就好了。
如果有什么参数需要上下文传的话,可以用withvalue这个函数,在context里面有封装好。