虽然被赶走了,但这次实习学到的东西还挺多的,go test实践,gomonkey测试,mock模拟,git实践,debug实践,es以及环境配置
go test
以前自己写的东西都没有写单元测试,就是跑起来看功能正不正常就完了,这次才有了写单元测试的意识,还有覆盖率,表示语句的覆盖率
覆盖率这个东西,需要保证大部分情况都被考虑到,但是有些东西在测试环境不是那么好复现,怎么办呢,gomonkey这个脏玩意就体现出作用了
gomonkey
它可以模拟一个函数或是方法的执行结果,在测试函数中声明,声明后,当测试运行到声明的那个函数或方法时,就会返回预先设定的结果,不管是data还是err,非常的黑科技
但是这个东西吧,其实相当于取巧了,因为很多地方是不应该通过模拟来覆盖的,尤其是一些重要的地方,可能会引发panic的那种,如果用gomonkey图方便,对于程序的健康不利
mock
除了gomonkey,还有一种模拟程序执行结果的方式,就是mock,这次我主要是看到它作用于数据库的方式,即模拟数据库的数据以及查询语句,其它地方不知道能不能用
git
以前就知道是pull,push,而且都是在master分支上做的,这次实践学会了很多新操作,比如不同的commit要用不同的格式,如何处理自己的branch和要提交的branch,这个项目里因为有些包不支持arm64,所以开发时需要注释掉那些包,但是提交上去不能注释,所以需要自己的开发分支和测试分支
对于commit也学了很多,比如git show查看修改,git reset回滚commit,git rebase重基,这些东西学的时候没感觉,用起来才能体会较深
debug
这是第一次知道debug的强大之处,我用的是goland,其它ide应该也支持debug模式,不过goland的debug在运行的时候还能显示变量的值,这个非常好用,话说我以前debug都是用标准输出,那样效率实在太低,在一堆日志里找错误信息太磨人,不过有时候也需要用输出,就是在程序运行的不太正常的时候,跑不起来
debug的一般流程是,在对应的接口handler打一个断点,然后跑,在api管理工具或者前端界面请求接口,接着看具体怎么运行的
elastic search
简称es,这好东西我之前怎么不知道,一个非常强大的,"民用"搜索引擎,它可以支持多种模式的搜索,话说以前我都好奇小网站的搜索是怎么做的,这下明白了
以后可以好好学学这玩意,真的好用
环境配置
开发效率低,很大程度上是我一直在搞环境配置的问题,这个真的很致命,搞了一轮之后,后面应该就会更得心应手了,好事
首先是在git那说的,有些包,比如go-aci,暂不支持arm64架构,开发的时候需要在go.mod把它注释掉,然后把间接依赖的包也得注释掉
组件,例如mysql,redis,nats,es等等,这里我是感受到docker的强大之处了,直接pull一个镜像,跑,一气呵成,跑起来就和跑在本机上一样,还省去了下载安装的麻烦步骤,不过docker用到后面可能会有更多潜在的问题,目前没怎么遇到,像是网络,卷那些......
配置文件,一般的项目应该都有配置文件,格式一般是json,yaml,项目里用的toml,闻所未闻,不过和yaml其实是类似的,开发前一定要把config文件配置好,不然跑不起来,config也分为生产环境和开发环境,自己开发要用开发环境
数据库,有一个比较坑的地方(可能只是对我而言),mysql数据库默认的字符集是latin,不支持汉字,应该声明为utf8,就这个东西卡了我好长时间我都没发现,最后还是开发时终端提示 /x** 是不支持的字符集,才意识到