不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

记一次项目演示前赶deadline的经历

起因

给新疆广电做的流媒体收录系统,原定于六月二十日研发完毕,无奈要提前演示,定到了五月底。所以我负责的地方需要抓紧进度。
同时下周一要做芒果TV的演示,我这里负责的模块网络端没有跑通。

紧张

由于我之前在根据芒果TV的需求修改我负责的流媒体服务,改动较大(确切地说我已经改晕了),已经把最原始的功能都已经无法复现了,导致新疆广电的需求也无法完成。我在想,我该怎么办?

转机

在我即将感到绝望的一刻,产品负责人把部门的两位大佬打电话叫来,他看了下我的代码,改删的删,改增的增,在本地跑通后,放到测试环境上跑了一下,看了下日志,修改了几处异常,测试环境就跑通了,新疆广电的演示算是完成了。
而芒果TV的需求,涉及把业务流程搞懂再添加业务判断逻辑,和数据的封装和请求的发送,而我的问题就在于不知道这段逻辑代码放在哪里。不过还好最后有老哥带我一步步跟代码,最终把代码放到了正确的位置,测试也跑通了。

经验教训和感受

  • Go写一个服务,应当首先用curl命令在本地跑通,接着写一个Test测试函数针对核心逻辑就行测试和修改,如果需要依赖其他服务,要么把需要的服务也部署起来,或者用Nginx去模拟Mock它(这个我还不会)。
  • 越紧急的事情,一定要放宽心,深呼吸两次,不然很容易犯低级错误,比如该打日志的地方没有打,或者数据库查询语句写错,或者是变量名的格式没有写对,或者是curl命令请求时忘记在每一个出现"\curl命令请求发json时的格式)。而这些细微的出错,最终都将导致自己,或者陪同的其他研发人员,甚至测试人员白忙活一阵。
  • 一定要对服务器业务逻辑熟悉,一定要经常打断点去跟代码。
  • 遇到Panic空指针报错,一定是一些值没有初始化造成的,而我是犯了一个低级错误:没有error,自己在日志中打了个error.Error()导致的,为此我付出了代价,全局搜索了error.Error()字段,把有问题的语句全部改了。
    1
    2
    3
    4
    //这是错误的,一定要注意,直接会抛异常
    if len(xxx) == 0 {
    Log.Error(err.Error())
    }
  • 遇到想不通的问题,多在存在疑惑的代码片段周围打满日志。
  • 遇到的每一个bug,详细记录错误发生的原因,以及找到错误解决的方式,还有解决过程,记录完后要及时回看。
  • 熟练使用git指令,不只满足于add commit push三步,还应该涉及合并,cherry-pick等比较危险的指令,这有益于减少管理代码和发版时瞎忙活的概率。
  • 相比于研发,测试运维这些人在体力上都比较辛苦,所以建议能自己解决的就少给他们增添麻烦。也许是我看到他们一个电脑开着十几台虚拟机,远程连接里套着远程连接再套着远程连接,周围做前后端和产品都围着他时,才有的感触吧。

问题警报解除后,同事问我,有没有是在给家乡做贡献的感觉。我说,有那么一点。但我心里更多的是对他们的感激与深深的惭愧,交代给我负责的项目,没有完成,同时也暴露了我的诸多开发上的问题。这些坑,我需要尽快填上。

希望项目演示一切顺利!

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!