PHP开发者学Go:实战项目助我突破进阶瓶颈
PHP开发者学Go:实战项目助我突破进阶瓶颈
之前有朋友让分享从PHP转Go的经历,这次就从模仿、进阶、应用三个方面来描述转Go的经历及心得。模仿是良好的开端,进阶是艰难的成长,应用是认知的提升。希望这段经历能对大家有所启发。
模仿
著名艺术家毕加索说过「模仿是人类一切学习的开端,然后才是创新,最后是你的自主」。在我国军事的发展上有一个典型的例子,第一艘新航母模仿的就是辽宁号航母,这促使我们更加容易理解:先模仿,再创新,后超越的路子。大到国家尚且如此,那么小到个人更应该充分认识到「模仿」的价值。模仿是人类固有的天性和本能,大家小时候经常会模仿大人模样,比如学大人的说话口气、做各种动作等等。
在学习Go语言的过程中,正是利用了「模仿」这种技巧,比如把Go中的结构体Struct对标成PHP中的Class、把Go中的接口Interface{}对标成PHP中的抽象类Abstract Class、把Go中的结构体指针Pointer对标成PHP中的类对象This、把Go中的Gin框架对标成PHP中的ThinkPHP框架等等。刚开始在熟悉了Go的语法后,力争都要能在PHP中找到相应的影子。然后使用PHP的框架ThinkPHP实现一个CURD的案例,再把这些功能利用Go的框架Gin实现一遍。语言绝大多数的区别都只是语法糖的不同,编程思想都类似,万变不离其宗。都说万事开头难,利用这个模仿的技巧实现这个案例之后,算是开了个好头,让自己有了简单的成就感,看到了相应的学习成果。最重要的收获是迈出了学习Go语言的第一步,克服了畏难思想。
进阶
模仿式学习只是掌握了表面知识,就好似练习咏春拳只学到招式,没有学到内功。要想修炼好内功,还得理解语言的本质区别。PHP是解释型、动态类型语言,代码的运行是基于Zend VM虚拟机引擎,在Web领域应用广泛。Go是编译型、静态类型语言,直接编译成二进制可执行文件便可运行,在高并发、云计算等领域应用广泛。PHP在Web领域有着天然的优势生态完善,Go的高并发性能突出,两者刚好互补,这也是学习Go语言的主要原因。
真正感受到Go语言的与众不同,是在参与了一个物联网项目「基于IOT物联网在线直播抓娃娃」(文末附上了项目代码地址)的开发之后,这个项目开发了实时通信、视频推流、设备通信、用户分发等技术,这些技术都是基于Go语言的goroutine、websocket、mqtt、channel、select等特性实现的。实践出真知,真正的进阶是要在参与实战项目之后才能得到提升。当然有幸参与了这类项目,但大部分人却可能连参与实战项目的机会都没有,那应该怎么进阶呢?回答是「交流」,多与高手交流、向高手学习、听高手讲解。俗话说的好「听君一席话,胜读十年书」便是如此。和高手交流对我们的学习和成长很有益处,不仅有助于了解技术方向、关键的技术点,也可以通过观察和学习高手的技术思维、解决问题的方式。最后在进阶的路上还是得多寻找一些实践的机会,毕竟实践是检验学习效果的唯一标准。
应用
好钢要用在刀刃上,要充分了解PHP语言与Go语言的差异,才能在各自的场景中利用好PHP和Go的优势,避免出现杀鸡滥用宰牛刀、胡子眉毛一把抓的现象。在之前的公司就有过这样的情况「立项前:高并发,日活千万,用xxx语言;上线后:停掉吧,一个用户都没有」,相信大家也遇到过类似的情况,最终项目的结果都是不了了之。
因此在实际的项目开发中,选择合适的技术是一项很重要的原则。比如在项目的初期利用PHP语言短平快的特性,快速的把项目推向市场进行试错,及时收集用户的反馈,推进项目的持续优化,当用户量达到预期的规划时,适时对部分访问频繁的接口,采用Go语言进行重构,以承载后期的访问量。技术选项和架构设计是随着业务的发展而进行演进的,不可能一蹴而就,有了这个认识后,才能发挥出PHP和Go各自的价值。
结语
其实想要更深入的学习好Go语言,还得花时间去巩固操作系统、网络通信等基础知识。有些普通PHPer可能连多进程、协程、socket、epoll、tcp/ip等概念都搞不清楚,只会用简单的框架套用模版,那何谈能把Go语言学好?这也就是有些人转Go语言失败的原因。真正学好Go语言并不容易,从刚开始模仿式的学习,期间也踩过很多坑,限于篇幅原因没有展开,再到后来的进阶实践也是遇到各种编译错误,最后从应用层面来认知到学习Go语言的价值。学习经历并不适用于每个人,仅供大家参考,希望大家都能找到自己学习Go语言的正确道路。
推荐
- PHP转Go系列 | 变量常量的使用姿势
- PHP转Go系列 | 字符串的使用姿势
- PHP转Go系列 | 数组切片的使用姿势
- PHP转Go系列 | 条件循环的使用姿势
- PHP转Go系列 | 类结构体的使用姿势
- PHP转Go系列 | ThinkPHP与Gin的使用姿势
- 基于GoLang实现的IOT物联网在线直播抓娃娃企业级项目