在多年 PHP 开发后,我学习了 6 个月的 Go 语言

PHP

我16岁时发现了PHP。这是我用于实际编程的第一语言。当时,我使用它来评估用户提交的表单并发送电子邮件,其中大多数是“与我们联系”表单。多年来,我始终把PHP作为我的强项,并确保自己不断扩大自己的PHP知识和技能。我认为我虽然不是PHP的大佬,但这是我最了解的语言。过去,我有机会在中小型项目中使用Ruby,JAVA,Python和NodeJS。这些经验使我得以了解PHP与其他编程语言的比较方式,如何更好地利用其优势并防范其劣势。

6个月前,我以工程师的身份加入了MessageBird。我申请的职位是PHP工程师,但是我几乎不知道,入职后我将开始使用GoLang完全摆脱PHP。这是一段神奇的经历,这段时间我学习了一种新的编程语言。而现在我又带着6个月的GO编程经验回归到了PHP的怀抱。

GO 是一个具有独特的功能组合的强大编程语言。 很遗憾我没有更多的时间和它相处。我出于与编程语言无关的原因而重返 PHP,但是,我想要总结一下这种经验并分享两者的比较。

静态 vs 动态

GoLang 是一种静态编程语言,与动态的 PHP 不同。这意味着在初始化变量和对象时,你总是必须事先考虑其数据类型。在PHP中,你永远不会初始化变量,只是在需要时立即开始使用它。因此,在声明一个新变量之前,GoLang 让您三思而后行,与我们在 PHP 中检查变量的内容相比,我发现它比以前检查变量的内容更有效率。 PHP 在版本 7.* 中添加了类型声明,并且使用它们是更好的做法,但是在编写代码之前三思而后行是一种更健康的做法。

子程序 vs 并行处理

Go语言最令人惊讶的的特性之一是提供了goroutine。它允许并发运行函数。在PHP中,没有什么能比goroutine更简单易用了。在PHP中,每当你不得不使用并行处理时,你必须添加外部的排队机制(Beanstalk,RabbitMQ等等)。这使得基础架构变得复杂,并增加了项目的复杂性。

Go语言是并行处理的胜利者。

OOP特性

自编程发明以来,OOP的概念就存在了。当该技术在C++中广泛应用时,它成为90年代的主流。关于OOP我最喜欢的是它允许引擎使用代码创建业务逻辑图。当不断发展的系统引入变更时,它被证明是无价的。虽然PHP和Go语言都提供OOP特性,但是这两者还是有很大的差异。

我花了一段时间才习惯使用隐式接口。在Go语言中,当实现所有方法后,你的类型才满足接口的要求。而在PHP中,你明确地告诉你的类型需要定义什么接口,然后开始运行。Go语言这个特性让你不用一开始就考虑应用程序的协议,这与我期望中的静态类型语言相反。

不断发展的模型具有复杂的可处理领域驱动设计的需求。为了实现这个,你需要很多OOP特性,而PHP提供了大量的特性——traits,抽象方法和类,final方法和类,魔术方法等等。Go语言缺少许多这些特性,这是难以克服的局限性。这就是我为什么认为Go语言只适合微服务和小型应用程序,而PHP适用所有微服务,小型、大型、超大型应用程序

测试

我认为定义一个项目质量好坏最重要的事就是测试—单元测试,集成测试,功能测试,UI测试,性能测试—这些在你的项目中越多,你的可交付成果的质量就越好。GO和PHP都拥有优秀的单元测试框架—Go拥有嵌入式测试包,PHP有PHPUnit,两者都提供了大量的功能集用于测试你的代码。PHPUnit要比GoLang的测试组件包有更多的特性,这是因为PHP本身拥有更多的特性。这两种工具都能很好地完成各自编程语言的测试工作。然而,当进入到高级测试时,PHP和Go就显现出了很大的不同。

首先,对于性能测试,Go在它的测试组件包中有许多特性。很多库(例如pprof)使用这些特性创建大量的数据报告。虽然PHP有自己的一组库和技术用于性能测试,但Go似乎更易于使用。我相信这是静态类型语言的优势之一。

其次,对于高级测试技术,例如BDD,TDD,以及A/B测试,PHP有着更多的支持,更多可选的库以及更大的社区。例如,Cucumber(或Gherkin)都有两种语言的实现,但是带有BEHAT实现的PHP支持40多种语言,它由独立组件从头开始构建,并且在GitHub上得到了比Cucumber更多的支持(更多的forks及stars等)。

最后,对于功能或UI测试,PHP拥有更多的库和对现有工具更好的支持。Selenium库对PHP有强大的支持(3000+跨浏览器测试,视频记录,文本及可视化日志等等),然而对于Go,只有一个不再维护的驱动—tebeka/selenium(在本文发表时它最后一次commit已经是5个月之前了)。

其他差异

这两种语言有很多其他不同的地方,我将只提及一些:

  • Go相比PHP而言,有着更好的性能。数百个基准测试测试了在多种情况下的Go和PHP,大部分情况下,Go语言明显是赢家。最重要的是,在开发中会感觉Go语言更快——测试运行速度更快,内存使用率更高效,CPU使用率更低。
  • PHP社区多于Go语言,其支持程度令人惊讶。我知道在使用Go的时候有一些不好的事情,例如代码生成器,这是PHP社区几年前留下来的东西。
  • 包维护也是非常困难,Go语言是内部管理,而PHP有两种不同的实现级别——第一是PHP扩展级别,其次是每个人都使用Composer的库级别。对于PHP来说,管理两种级别更为复杂。

最后想法

这两者非常容易区分,在这两者做出选择也很容易。Go语言有更好的性能、本机异步函数、简洁的特性,这使得它适合需要大量使用的小型应用程序和微服务。

在专注于利用OOP特性和社区支持的增长型应用程序的开发上,PHP感觉在更为自然。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/swlh/6-months-with-go...

译文地址:https://learnku.com/php/t/39457

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 3

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!