起因
给新疆广电做的流媒体收录系统,原定于六月二十日研发完毕,无奈要提前演示,定到了五月底。所以我负责的地方需要抓紧进度。
同时下周一要做芒果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
等比较危险的指令,这有益于减少管理代码和发版时瞎忙活的概率。 - 相比于研发,测试运维这些人在体力上都比较辛苦,所以建议能自己解决的就少给他们增添麻烦。也许是我看到他们一个电脑开着十几台虚拟机,远程连接里套着远程连接再套着远程连接,周围做前后端和产品都围着他时,才有的感触吧。
问题警报解除后,同事问我,有没有是在给家乡做贡献的感觉。我说,有那么一点。但我心里更多的是对他们的感激与深深的惭愧,交代给我负责的项目,没有完成,同时也暴露了我的诸多开发上的问题。这些坑,我需要尽快填上。
希望项目演示一切顺利!