PHP 程序员是学 Swoole ?还是学 Go ?

大家好,我是码农先森。

面临现状

这次为什么要讨论这个话题,因为 Swoole 和 Go 在 PHP 程序员坊间一直都是茶语饭后的谈资,觉得懂 Swoole 和 Go 的就高人一等。相信有很多的 PHP 程序员,自打 Swoole 发布以来就从来没有使用过。还记得 Swoole 官方有一遍入门文章中曾建议学习 Swoole 之前,先学习 Liunx 操作系统、TCP/UDP 网络协议栈、Socket 通信等基础知识,作为 7 天入门、30 天精通 PHP 的靓仔们,面对这些基础知识不屑一顾,还会不时的反问,这些东西难道影响我 CURD 了?

在我的工作经历中遇到过这样的三类人,首先是:常年在 Window 系统下使用一键安装包 phpStudy 的 PHP 程序员,一辈子都没有翻开过 PHP 相关的源代码。即使在 Linux 服务器上也是使用万能的宝塔面板,一键便启动了 php-fpm、MySQL、Redis 等服务,如果服务出错误久久不能正常运行,便傻眼了不知所措,然后开始在各大技术群中发求助信并艾特各位大佬。每当我看到此种场景,心情都久久不能平静。其次是:时常游迹于 Thinkphp、Laravel、YII 等各大框架社区并对框架 MVC 模式有所贡献的 PHP 程序员,这些人还成为了这些框架的布道师,对框架的优劣势了如执掌,但俗不知自己可能已经陷入了框架的泥潭,在这个泥潭里久久不能自拔。最后是:偶尔会跨过互联网的那堵墙去看看外面世界的 PHP 程序员,有着对技术的好奇心且不甘于现状,开始尝试向下探索向上生长,但在这个追逐技术的路上不免会迷失方向,走到了技术的迷雾中。

虽说这三类人的情况都大不相同,但相信大家对 Swoole 和 Go 都有进阶学习的想法。接下来我会介绍一些学习上的建议,希望对大家能有所启发。

知识储备

Swoole 基于 C 语言开发的 PHP 异步通信扩展,其中涉及了多进程、协程、同步、异步、IO多路复用、Socket 等技术点。因此学习 Swoole 之前需要先把这些概念搞懂,才能进入下一步的学习。如果是科班出身的程序员对这些概念多少有点了解,非科班的就要多学习下基础的知识,把概念牢牢掌握。在这里我也把这些概念在 Swoole 中结合一下,比如学习了多进程就可以理解 Swoole 的多进程运行模式,学习了同步异步就理解了 Swoole 中的阻塞与非阻塞模式、学习了IO多路复用就理解了 Swoole 中的事件循环的机制、学习了协程就理解了 Swoole 中协程及通信通道的用法、学习了 Socket 套接字就理解了 Swoole 中所有的网络通信都基于 Socket 的原理,还有很多这里就不一一举例了。只要把操作系统、网络协议的基础知识学一遍,那么学习 Swoole 便会更加得心应手。反之没有这些基础,那么学起来会非常的吃力,这也是很多的 PHP 程序员学习 Swoole 举步维艰的主要原因。

再来说说学习 Go 语言要具备哪些基础,从理论上来说要和学习 Swoole 要具备同样的基础。但是有很多人会说了,我没有这些基础也能用 Go 开发项目呀,CURD 操作开发、API 接口开发溜得一皮。是的,实际上没有上面说的那些基础也能开发,但那只是 Go 应用场景的冰上一角。Go 语言的真正优势是高并发特性,要想真正用 Go 开发出高性能的项目,那这些基础知识是必不可少的,不然可能连 Go 的协程都玩不明白,搞的内存资源到处泄露,到头来 Bug 层出不穷得不偿失,反而最后还会觉得 Go 还没有 PHP 好用。

学习路径

回到这篇文章的主旨讨论的是学习 Swoole 还是学习 Go ?我认为要先学习 Swoole 再学习 Go,其中的原因文中已经有所阐述了。从近年 Swoole 的发展来看,其中很多的新特性也是从 Go 中所有借鉴。网上还有人调侃说 Swoole 越来越像 Go 语言,确实 Go 语言自诞生以来就出身贵族「谷歌」一直带着耀眼的光环,是很多语言学习的榜样。看 Github 的排行榜 Go 语言的使用热度也是逐年的上升,因此学习 Go 语言也是大的趋势,但在学习的路上也要打好地基脚踏实地,只要把自己这把刀磨好,就不怕耽误砍柴的功夫。

最后我也推荐一个基础知识的学习网站 xiaolincoding.com/ 这里的内容大多数都是图解的方式,理解起来会相对容易些,希望对大家能有所帮助。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 38

我说实在的,开始学习编程是带点爱好的,现在已经很少了。还有这种文章看起来真不喜欢。什么叫借鉴,一般借鉴就是抄,问题还抄的一般,go至少用起来简单。编程是要有成就感的,跑的第一个demo,做的第一个项目,做一个访问量不错的网站,对某个问题的攻克。这是会让人自发的去学习,如果是死记硬背,有什么意义。go的第一个协程demo至少新手很容易就写出来了,swoole呢,文档开篇就充斥着高人一等的气势。

1周前 评论
PHP-Coder 1周前
简愉 1周前
ononl (作者) 1周前
哪吒的狗腿子 1周前
ononl (作者) 1周前
PowerFul 4天前

学JAVA吧 如果你是因为性能而选择go那么首先排除GO,因为在实际项目工作中,php的性能足以撑得住任何一家公司上市融资,实现财富自由。其次,GO的岗位少得可怜,为啥PHP凉了,不是因为性能问题,而是因为创业者少了

1周前 评论
曲水寒江忆无城 1周前
余胜军 1周前

我说实在的,开始学习编程是带点爱好的,现在已经很少了。还有这种文章看起来真不喜欢。什么叫借鉴,一般借鉴就是抄,问题还抄的一般,go至少用起来简单。编程是要有成就感的,跑的第一个demo,做的第一个项目,做一个访问量不错的网站,对某个问题的攻克。这是会让人自发的去学习,如果是死记硬背,有什么意义。go的第一个协程demo至少新手很容易就写出来了,swoole呢,文档开篇就充斥着高人一等的气势。

1周前 评论
PHP-Coder 1周前
简愉 1周前
ononl (作者) 1周前
哪吒的狗腿子 1周前
ononl (作者) 1周前
PowerFul 4天前

swoole越来越有脱离php生态趋势。在swoole和go里选择的话,肯定选go。用swoole要是引入php类库,要时刻担心在swoole里有没有问题

1周前 评论
李铭昕 1周前
mengmeng_phper 1周前
jackbot 1周前

直接转炒面,现在这环境开发全是阻力,特别GFW以及各个大公司源都不怎么维护了

1周前 评论
ononl 1周前
working (作者) 1周前

学JAVA吧 如果你是因为性能而选择go那么首先排除GO,因为在实际项目工作中,php的性能足以撑得住任何一家公司上市融资,实现财富自由。其次,GO的岗位少得可怜,为啥PHP凉了,不是因为性能问题,而是因为创业者少了

1周前 评论
曲水寒江忆无城 1周前
余胜军 1周前
sanders

我觉得一个语言用来实现某些功能的扩展库和另一个语言本身没什么可比性。

另外就是先明确目的再做选择取舍。如果你看中一种技术,想从事相关行业那就不用焦虑,学就是了。

1周前 评论

用swoole还需要安装docker,现在docker官网都搜不到了,还是用go吧

1周前 评论
sanders 1周前
曲水寒江忆无城 1周前

那肯定是学golang啊,golang至少有大公司背书,swoole有什么,内部分配不均天天吵架,还很轻视初学者

1周前 评论

肯定都要学了 不仅要学swoole 你甚至还需要学习workerman 它的源码值得读一次 go也学就行了 诶不是 你问的这是什么啊 都不能算是一个问题啊

1周前 评论

我用go就是因为它部署简单,仅此而已。 :joy:

1周前 评论

swoole 是框架,golang 是语言 面向需求开发

1周前 评论
yourself

首先别给自己定义成 xxx语言程序员,其次swoole也不是php,核心是C++。php本身优势也不是性能,要不官方为什么不直接优化协程,并发这些,你觉得官方的实现不了?

1周前 评论

最好肯定还是Java,但是Java太卷,中途转Java没有任何优势,我已经转Go1年多了

1周前 评论

就目前情况来看 golang 是一个不错方向

1周前 评论

成年人不做选这题,都学学,收货肯定不一样!

1周前 评论

学rust 吧,要性能有性能,要安全有安全,要前景有前景(国内暂时没有),要优雅,有优雅。

4天前 评论
IT学徒 14小时前
laaa (作者) 7小时前

个人觉得不管是用 Go 还是 Swoole 其核心还是并发编程的概念(锁、协程调度、IO......),这方面形成知识体系后,无论是用 Go 还是 Swoole 都只是语法糖层面的问题了!

1天前 评论

为什么要选择,swoole和go都学,技不压身

16小时前 评论

肯定是学go啊,swoole不行了,以前加过swoole vip群,那群主就把人踢走了,除了装逼觉得自已写的扩展和框架牛逼外,一点谦虚的态度都没有,只知道弄个群搞圈子搞钱,别人发点文章和视频分享下都不行,问点技术问题也是没人理。还不如早点转golang

15小时前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!