Go 是一种功能强大的编程语言,具有独特的功能组合。而 PHP 是在服务器端执行的脚本语言,与 C 语言类似,是常用的网站编程语言,同时适用于所有微服务、小型、中型乃至大型应用程序。对于开发者而言,两者在使用过程中,有哪些不同的体验?本文即将为大家揭晓。

作者 | Dan Gurgui

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

16岁的时候,我发现了PHP。这是我学习的第一门编程语言。当时,我利用PHP来检查用户提交的表单并发送电子邮件,大多数表单都是“联系我们”。多年以来,我始终将PHP作为我的强项,且坚持不懈地发展壮大自己的PHP知识和技能。虽然我觉得自己算不上PHP高手,但这是我最了解的编程语言。以前,我曾有机会在小型项目中使用Ruby、Java、Python和NodeJS。我通过这些经验比较PHP和其他编程语言,了解如何更好地利用PHP的优点并克服它的缺点。

6个月前,我成为了 MessageBird 的一名工程师。申请工作的时候,我填写了PHP,但是我没想到入职后我就开始使用 GoLang,而且与PHP渐行渐远。这种一次很好的经历,在这段时间里,我学习了一种新的编程语言,而如今我又回到了PHP,同时我还拥有6个月的Go编程经验。

Go是一种功能强大的编程语言,具有独特的功能组合。我很遗憾没能更深入地学习Go。我返回PHP的原因与编程语言本身无关,但是,我想总结一下这6个月的经验,并比较一下这两种语言。

静态与动态

GoLang是一种静态编程语言,不像PHP那样是动态的。因此,你需要在初始化变量和对象时提前想清楚。在PHP中,你永远不会初始化变量,需要时当场使用就可以了。因此,在声明一个新变量之前,对于GoLang而言你需要三思而后行,我发现这比在PHP中检查变量的做法更有效率。PHP 7添加了类型声明,这是一个更好的实践,但是在编写代码之前三思而后行是一种更健康的做法。

子程序与并行处理

GoLang 非常神奇的功能之一就是goroutine。这个功能支持异步运行功能。PHP中没有任何功能与Goroutines的简单性和易用性相提并论。每当需要在PHP中进行并行处理时,你都需要添加外部的排队机制(Beanstalk、RabbitMQ等)。这会加剧基础架构的复杂性,并增加项目的复杂性。

GoLang的并行处理远远超越了PHP。

面向对象功能

自从编程问世以来,面向对象的概念一直拥有一席之地。90年代,面向对象在C++中得到了广泛应用,也因此成为了主流范式。面向对象最吸引我的地方在于,它允许工程师使用代码创建业务逻辑图,事实证明,当不断发展的系统发生变化时,这种做法提供的价值无可限量。PHP和GoLang都提供面向对象的功能,但是,这两种语言之间存在很大差异。

我花了很长时间才习惯了隐式接口。在GoLang中,在实现所有方法后,类型就会满足接口要求。但在PHP中,你需要显式地定义类型所需的接口,然后开始实现。有了Go的这一功能,你不需要提前思考应用程序的接口,这一点与我对静态类型语言的认知正好相反。

不断发展的模型具有复杂的需求,而领域驱动的设计可以满足这种需求。为此,你需要许多面向对象的功能,PHP也的确提供了许多这样的功能:trait、抽象方法和类,final方法和类,魔术方法等等。GoLang缺少这些功能,这是一个难以克服的限制条件。因此,我认为GoLang仅适用于微服务或小型应用程序,而PHP适用于所有微服务、小型、中型乃至大型应用程序。

测试 

我认为,在决定项目质量方面,测试是最重要的工作:单元测试、集成测试、功能测试、UI测试、性能测试等等,项目拥有的测试越多,交付的质量就越好。GO和PHP的单元测试框架都很出色,Go拥有嵌入式测试包,而PHP有 PHPUnit,它们都提供了一组丰富的功能,可用于测试你的代码。PHPUnit的功能比GoLang测试包更多,因为PHP的功能更多。这两种工具都可以完成编程语言的工作。然而, 在进行高级测试时,PHP和Go就会表现出很大的不同。

首先,对于性能测试,Go的测试包中拥有很多性能测试的功能。pprof 等许多库都可以使用这些功能来创建华丽的数据报告。虽然PHP也有一套可用于性能测试的库和技术,但Go的更加易于使用。我相信这是静态类型语言的优势之一。

其次,对于高级测试技术(例如BDD、TDD和A/B测试),PHP拥有更多支持、更多库,还有一个更大的社区。例如,两种语言都实现了Cucumber(或Gherkin),但是PHP 的 BEHAT 实现支持40多种语言,是完全基于独立组件构建的,而且在GitHub上的支持比Cucumber更多(更多分支、更多给星等等)。

最后,对于功能测试或UI测试,PHP的库更多,且对现有工具的支持更好。Selenium 拥有非常强大的PHP支持(3000多个跨浏览器测试、视频记录、文本和可视日志等),而对于Go来说,只有一个没有良好维护的驱动程序 tebeka / selenium(最后一次提交发生在5个月前)。

其他差异

两种语言之间还有许多其他差异,重点包括:

  • GoLang 的性能比PHP更好。我们有数百种基准,可以在各种情况下测试 PHP 和 GoLang,但大多数时候明显都是 GoLang 胜出。最重要的是,Go的开发速度很快:测试运行速度更快、内存使用效率更高、CPU使用率更低。

  • PHP社区的人数远远超过了 GoLang,而且支持非常出色。我发现 GoLang 使用了许多糟糕的东西,例如代码生成器,这都是PHP社区几年前抛弃的东西。

  • 打包维护也很不相同。在GoLang中,打包维护是内部管理的;而PHP有两层不同的实现方式:第一,PHP扩展级别;第二,每个人都使用的库级别。PHP的情况更为复杂,而go则将两层管理放到了一起。

最后一点想法

这两种语言有明显的区别,在两者之间做选择非常容易。GoLang 的性能更好,拥有原生异步功能以及其他基本功能,非常适合需要频繁使用的小型应用程序和微服务。

然而,随着应用程序的不断增长,业务逻辑复杂度加剧的情况下,PHP是很自然的选择,因为你可以充分利用PHP的面向对象功能和社区支持。

原文:https://medium.com/swlh/6-months-with-golang-after-many-years-with-php-c52124fb7da?

本文为 CSDN 翻译,转载请注明来源出处。

【End】

热 文 推 荐 

☞微信小程序 3 岁:日活超 3 亿,交易额超 8000 亿

拿下微软、Google、Adobe,印度为何盛产科技圈 CEO?

微信9年:张小龙指明方向,微信AI全面开放NLP能力

2019 互联网大事记:谁是最后的赢家?

☞中国程序员在美遭抢劫电脑遇害,数百人悼念

☞2019,不可错过的NLP“高光时刻”

☞详解CPU几个重点基础知识

☞在以太坊上开发 Dapp 的瓶颈和门槛有哪些? | 博文精选

你点的每个“在看”,我都认真当成了喜欢

作为多年 PHP 的开发者,在使用了 Go 语言之后......相关推荐

  1. python 语言包_10个对Web开发者最有用的Python语言包

    本文主要向大家介绍了10个对Web开发者最有用的Python语言包,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. Python最近成为了开发人员最喜欢的语言之一.无论你是专业的, ...

  2. Chrome浏览器中如何将开发者工具(F12)语言从英文设置成中文

    1.点击 设置图标 2.将language改为Chinese,关闭页面 3.点击 reload DevTools 重新加载开发者工具 4.语言变为中文

  3. go语言加速python_Python开发者在转到Go语言之前需了解什么? - 头条网 TouTiao.com 你关心的,才是头条!...

    这是一篇(长)博文, 介绍了我们在 Repustate 迁移大量 Python/Cython 代码到 Go 语言的经验.如果你想了解整个故事,背景和所有的事情,请继续往下读.如果你只是想了解 Pyth ...

  4. 平均月薪 21.8k、中国开发者占比最高,揭晓 Go 语言真实现状!

    [CSDN 编者按]在我看来,Go 语言简单易学.性能优良这两点就足够令我倾心.JetBrains Blog 近期发布了关于 Go 语言的调查报告,一起来瞧瞧报告都说了些啥-- 编译 | 李磊   责 ...

  5. 调查了6万多名开发者后,我们发现了这些...

    关注.星标公众号,直达精彩内容 作者 |  Naina Chaturvedi 译者 |  Rayden 策划 |  褚杏娟 近十年来,Stack Overflow 的年度开发者调查一直是针对全球编码人 ...

  6. 他们调查了3.9万名程序员,制作了这份开发者技能报告

    这是一份样本数超过 3.9 万人的调查报告,参与调查的开发者遍及全球.除了四分之一的开发者在学会开车前先学会编程之外,还有这些调查结果等你发现.对照这份调查报告,看看你跟世界上其他国家地区开发者之间的 ...

  7. Kotlin 和 Flutter 对于开发者究竟意味着什么?

    作者 | 段建华 责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 写在前面 [CSDN 编者按]近些年来,编程语言流行度的变化其实不大,在 TIOBE 编程语言排行榜上,Java.C. ...

  8. 全球开发者大调查:编程始于少年,Python 成最爱

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 近日,编程竞赛网站 HackerRank 基于 39441 位开发者的调研数据,总结了 20 ...

  9. 微软在2022年Gartner云计算AI开发者服务魔力象限中被评为“领导者”

    在2022 Gartner® Magic Quadrant™ 云计算AI开发者服务上,微软的服务获得了Gartner的认可,在"愿景完善度"坐标轴上处于最远端. 根据Gartner ...

最新文章

  1. centos7 启动流程图_Linux启动过程详解
  2. mysql php 缓存机制_mysql数据库查询缓存原理是什么
  3. python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
  4. 教你买虚拟主机不会受骗的九个方法
  5. 在flask-sqlalchemy中使用max min avg方法
  6. 龙飞船再次发射成功!马斯克无缘现场,因疑似感染新冠……
  7. 【幽默】工作搞不好的原因
  8. FoundationDB 学习 - 事务流程
  9. 光流.flo文件生成.png图片(可批量)
  10. 知识扩展——轻量级和重量级框架的区别
  11. [2019沈阳网络赛D题]Dawn-K's water(点分治)
  12. ELman神经网络matlab实现
  13. html span 文字垂直居中,p标签中的span标签文字垂直居中对齐
  14. linux 屏幕录像软件,Linux系统下推荐使用的5个屏幕录像软件
  15. 第二周学习记录之面向对象
  16. swift和swiftui_SwiftUI和UIStackflow问题
  17. org.quartz.JobPersistenceException: Couldn‘t store job:
  18. js优化上传大图片显示问题(压缩图片展示)
  19. docker如何将镜像中的文件下载到本地
  20. vue+js 从一个数组中删除在另一个数组中已存在对象;

热门文章

  1. PHP GD压缩图片
  2. [翻译]超炫列表动画的实现
  3. 深度学习各场景评估指标总结
  4. [C++] map 使用场合
  5. java基本字符串_java – c基本字符串操作
  6. 数据密集型应用系统设计--数据分区
  7. Linux Shell编程笔记10 Shell数组的补充
  8. [SQL实战]之查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
  9. Flutter进阶—实现动画效果(七)
  10. Express入门 模板引擎hbs 服务端渲染