大项目报错处理流程|青训营笔记

130 阅读2分钟

大项目报错处理流程|青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

因为在项目的开发过程中肯定会遇到各种各样的错误,所以学会处理错误也是开发过程中重要的一项本领

  1. 因为我是使用win自带的wsl2进行开发的,所以遇到的第一个问题就是kitex生成的build文件,执行后生成的执行脚本存在转码问题,我的报错是:”syntax error near unexpected token `$'{\r''“以及”cannot access ‘\r’: No such file or directory“,首先使用vim -b查看这个文件,可能会发现每一行多了~M或其他字符,可以使用安装命令yum install dos2unix,安装完成后,使用命令dos2unix xxx.sh其中xxx.sh为出现转码问题的脚本文件名,然后就可以成功执行了,该问题常出在脚本文件在windows环境下编辑过后再上传到linux系统上导致
  1. 服务代码的空指针错误,空指针错误经常遇到,但是一般情况下按照报错信息能追溯到出错误的代码,因为我使用的是kitex框架,所以当出现空指针错误时能追溯到service层的代码,这时,就需要从service目录的函数开始分析,哪一步出现了错误,比如没有判断该对象是非为空的情况下就直接访问该对象的函数或属性,因为我的目录结构是在handler.go生成的函数里调用service目录下的函数进行操作,所以需要判断一下这两个位置是否存在一些空指针的操作或者是没有判断的情况下就直接访问不知是否为空的对象
  2. 因为是新手小白,所以第一次写的时候在结构体类型转型这里卡了一会,因为model的结构体类型和kitex的结构体类型不是同一种类型,所以在service目录下增加了一个结构体转型的函数,就是将model类型的结构体转换成kitex类型的结构体
func modelToKitexMessage(message *[]model.Message) []*kitex_gen.Message {
    var messageList []*kitex_gen.Message
    for _, item := range *message {
        messageList = append(messageList, &kitex_gen.Message{
            Id:         item.Id,
            FromUserId: item.FromUserId,
            ToUserId:   item.ToUserId,
            Content:    item.Messages,
            CreateTime: item.CreatedAt,
        })
    }
    return messageList
}
  1. 如果报错是出现在服务下那就说明可能是服务出了问题或者是数据库操作部分出了问题,如果报错是出现在hertz下,那就说明是RPC部分出了问题,或者是网关层请求参数处理出了问题,要学会根据报错信息寻找错误可能发生的位置