完成一个毕设

背景

去年大概十一月份学校就让做毕业设计,我这个学Web的自然是没什么意外地继续写网站了。

其实起初的时候我很纠结做什么课题的。那个时候对爬虫挺感兴趣的,又出了React-Native,就有做个学校App的想法。然后又因为对Web非常熟悉,做网站肯定不会翻车。

纠结了一段时间导师说你做个在线考试网站吧。为了契合所谓的专业培养方向特意加上一些限定词。不过后来我发现这些限定词是对学生一定程度上的不信任,甚至是歧视。

因为我的导师不懂计算机,他让我去找另一个计算机的老师了解,探讨技术。然后我过去聊了半个小时。

这个老师年纪大了,技术水平基本上是开3k都不会有人要的那种。不过他一言一行中倒是充满了迷之自信。半个小时中我发现他只知道Java,他说出能帮我部署环境时候的骄傲让我再不想和他继续讲话。

然后我就开始像之前一样一个人搞毕设了。

后端

说实话后端选择太多了,我确实是纠结了一会儿。

一开始脑袋里蹦出来的是Node,但是Node写得多了,太熟悉。之后是Rails,但是我因为什么忘记的原因也没写。之后是laravel,我确实挺想写的,但是已经不写PHP很久了也不准备深入,所以也放弃了。然后那个时候Go被吹上天,正好实习的公司也是用的Go做服务端,所以就选择了Go。

那个时候基本上是毛都不会,然后突袭几天基本拿下了语法。因为怕翻车,用了revel框架,又找了个ORM框架:gorm

一段时间之后我发现Go压根不需要框架,自己老老实实用net/http写就行了。而且这个ORM一点儿都不给力,多表查询关系什么的我到现在都没搞明白怎么优雅地使用。

这些Go的Web框架和 laravel 或者 rails 比起来还是太幼稚了。

写Go最大的感触就是这个语言真是好简单。而且基本不存在撕逼的可能性。

循环只有一个 for 可以用。只有 Tab 缩进。强类型,多返回值。简单的延迟执行defer, 简单的多线程Goroutine

配合VSCode的智能提示写起来真是爽!

起初做这个项目的时候想得比较多。缓存?上!数据库?用最吼的!容器部署?搞!RESTful?怼起来!

不过说起来蛮尴尬的,一开始折腾了这么多,到后面有点儿虎头蛇尾的味道了。Redis除了建立连接,压根没有往里塞数据。数据库里面总条目也不过一百条左右。想了很多地方,因为业务太简单都没有放到另一个线程里的必要。欣慰的是接口倒是订得还好。

要是再搞个MQ就尴尬了😂

前端

前端自然是用我最熟的React栈了。这边我就写得很随便了。一开始也没上immutable,模块自动加载机制也没做,一开始甚至没打算写CSS Modules的。动画就想随便搞一下就好。

和后端相反,前端是越写越想搞个大事情。甚至开了个视图库的坑: le-theme, 不过别关注了,后面因为赶进度就没做更新了。

前端大概都是按照我的代码风格来的。写起来还挺开心的吧。

前端倒是没什么说的了,反正也没什么技术含量,有意思的东西也没写在开源项目里。新手看看还行。

部署

上了Docker,用docker-compose做多容器启动。还顺手创建了一个revel的image

终于会用docker了。开心。

Go的部署还挺好用的,可以交叉编译,然后scp传到服务器上,解压就行。

吐槽

换了Mac以后我非常不想用Vim了!因为MacVim实在太丑了!而我是个Vim粉!

我气得一度想砸掉这台Mac,所以我一直比较反对别人买Mac做开发。还不如买个同价位的Windows,然后装个Ubuntu。

前端变化太快。这短短的时间里,Redux异步管理已经又换了两茬。Angular从2升到了4,Node都不知道又跑了多少小版本了。

后端博大精深。我接触写了这么些东西,但还是没有去学习分布式架构,多活等技术。还需要加强姿势水平啊。

最后

答辩的时候准备的好多东西都没讲出口。这个跟面试感觉就有点儿像了。

老师只告诉我致谢那一块应该多写几行。。。结束了。

听其他同学讲好像是得了个优秀吧。

最后自然是放上地址,欢迎大家帮忙review。