## 起源
我学习Go语言,还要感谢我的同事【小天才】,后面都把我的同事称为【小天才】了。
小天才是前端开发,大概2年前被我招进公司,我们两个可以说是互相欣赏。
小天才觉得我很靠谱,放弃了几个更高薪的offer;我为了小天才能顺利入职,也和领导、老板大力沟通,争取福利待遇等等。
## 环境
一个好的工作环境,往往会有好的结果。
我和小天才所在的团队在2年时间里,对公司的CMS、小程序、网站、活动专题等项目进行重构,后端使用PHP的laravel框架,前端使用vue以及nuxt框架。期间成长不少,我主要负责后端开发以及部分产品原型的工作,小天才在技术方面前后端通吃。
## 契机
我们去年过年前工作量不是很大,有机会对项目进行再次拔高。我们俩都对性能有比较高的追求,私下有探讨过Go的特性,天生支持高并发等等!但是不深入,于是各自去找教程,学了不到一周。
## 摸索
我在learnku社区买了Go语言的教程,79一套。因为之前买过Laravel的全套课程,很认可learnku社区。所以Go语言的也买了。
但是Go语言教程确实看的云里雾里,不知所云。可能基础的原因吧,总之是没有入门。
小天才在B站上找了【李文周】老师的Go语言视频教程,非常的好。我强烈推荐一下。
[视频链接](https://www.bilibili.com/video/BV16E411H7og?p=1)
[博客链接](https://www.liwenzhou.com/)
当时有项目需求过来,为了方便小天才有足够的时间学Go(小天才学习新技术确实非常狂热,不能打乱我天才的节奏),我便自己把大多数需求接了下来。
## 你追我赶
终于过了一概1周,我把新需求搞定了,开始有比较充足的时间学习Go了,我算是走了小天才的老路,看视频教程,看他已经学习过的知识点。
下楼遛弯的时候我俩就探讨今天遇到的问题,他能回顾一下知识点,我能提前了解一下后面的知识。一个当复习了,一个当预习了。
这种互相提问,解答的方式非常好。我俩能比较快的理清知识脉络,能给对方讲明白说明自己已有了比较深的理解。
但是我觉得和小天才的距离有点大,就不看视频了,刷李文周老师的博客,写实例代码。每段代码我至少敲了3次:第1次整理好思路注释,盲敲;第2次比对我的代码和示例的区别,优化思考;第3次把注释删掉,完全从头到尾撸1~2遍。
因为我认为编程是手艺活,技术活,必须多动手!
必须多动手!
必须多动手!
## 落体项目
春节前,公司做了一个还算复杂的H5活动,类似支付宝集5福吧,我们俩决定用Go来写。
小天才下手贼快,我刚出完原型,设计完表结构,小天才就用Go把核心逻辑写好demo了。
我在demo的基础上继续写了分配方案、不同概率集卡的拉新数量、倒推活动成本等等。
有了这些数据基础我们就可以放心大胆的写业务逻辑了。
最终这个项目是小天才操刀,我检查了下代码逻辑,做了充足的测试。
活动效果非常的好,给我司公众号拉新超过1万+,老板很满意。
## 进阶
因为老板很满意嘛,元宵节又搞了一波类似的活动。
这次主要是我操刀,在小天才春节活动的基础上优化了部分代码,这就是传说中的站在巨人的肩膀上~
我大概整理一下我们使用到的技术点:
- 部署到Nginx
- 跨平台编译
- goroutine
- channel
- gorm
- gin框架
- Redis缓存
- 日志统计
- 登录中间件
- cors中间件
- session中间件
- 反射
- 读写锁
- docker
- 云效流水线部署
- K8S容器编排
## 总结反思
独行难,众行易。
我上学的时候还是愿意写点东西的,而且文笔还不错。
工作之后一直沉迷于撸代码无法自拔,荒废了码字这个天赋点。
(还有一件事:一个机缘巧合的机会和大佬交流了技术,大佬认为我过于草莽,虽然能干活,而且效率可观,但是基础薄弱,沉淀不足。)
我考虑写博客做总结,是一个非常不错的选择!
## 继往开来
我以后在撸代码的闲暇之余,一定多思考,多总结。
争取也多撸几篇有深度,有干货的好文章出来。
# 一起学习,打怪升级
后面我还会**更新更多跟go相关的文章,欢迎关注我一起学习**。
想和我交流的朋友可以**直接私信我**,或者**通过下面方式找到我**:
**微信号(常用)**:wangzhongyang1993
**公众号**:王中阳Go
有疑问加站长微信联系(非本文作者))