【黄啊码】为什么我建议您选择go,而不选择php?

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 很多开发者都认为php已经是“强弩之末”,是时候转go了,但在此之前,我们先好好了解一下这两者的差别到底在哪,如果连区别都不知道?那还谈什么转语言

来句老梗:php是世界上最好的语言

很多开发者都认为php已经是“强弩之末”,是时候转go了,但在此之前,我们先好好了解一下这两者的差别到底在哪,如果连区别都不知道?那还谈什么转语言

简单的区别
Go也称为Golang,它基本上是一种编程语言,可用于快速机器代码编译。它由Google创建。它是一种静态类型的编译语言。它提供了并发机制,可以轻松开发多核和联网的机器级程序。它是快速,动态类型和解释语言。

PHP是服务器端脚本,也是为Web开发设计的通用编程语言;是动态类型的快速和灵活的语言。它可以与各种Web模板系统和Web开发框架结合使用。通过PHP处理的代码通常由PHP解释器实现。

1、Go基本上是一种可用于快速机器代码编译的编程语言,而PHP基本上是服务器端脚本,也是用于Web开发的通用编程语言。

2、Go是一种静态类型语言。PHP是一种动态类型语言。

3、PHP使用核心PHP语言进行模板化,因此浏览器通过发送HTML代码处理PHP代码并将输出发送到浏览器,而在GO的情况下,它通常使用简单的模板系统。

4、Go的主要应用于是机器级学习及其相应的数据科学和工件分析。PHP主要应用于Web开发过程。

5、Go及其他版本有很多社区支持,并且得到Google的支持,它的社区支持比PHP增加了一点点。

详细的区别
语法区别:
一、变量定义与赋值
这里可以明显突出脚本语言与编译语言的语法差异

PHP:弱类型变量,同一个变量可以随意赋值任何数据类型

GO:强类型变量,变量需预定义,不能随意赋值不同数据类型

二、函数定义与回传
Go多值回传比较方便,PHP单值回传某些情况还需判断元素isset($data['nickname'])

PHP:函数只允许单个值回传

GO:函数可回传多个值,且传参与回参需定义数据类型

三、阵列(数组)
PHP对数组处理更方便更强大,GO定义多维数组需考虑类型,显得有点繁琐

PHP:定义一个数组变量,无需考虑元素类型任意的多层嵌入赋值

GO:需区分数组(定长)、切片、映射、接口

四、抛出异常机制
GO设计初衷就不建议用try catch这种方式捕捉异常,在编译前就应该检查错误,很多人吐槽过这点。

PHP:try和catch可以友好的捕捉代码不规范的异常错误处理

GO:与其它语言不同,panic如果不用recover()会使整个主程序退出不可用

五、判断元素是否存在
PHP比较精简,内置函数判断,GO判断显得有点不太人性化

PHP:简单用in_array与isset即可

GO:切片类型必须用遍历判断,Map映射需回传值判断

六、继承
GO设计思想就不是面向对象的编程,所以没有太多继承与多态,编写思想上需要改变。

PHP:extends关键词继承父类的方法和属性

GO:struct结构体定义成员属性变量,从而实现继承

性能区别
我们在这用一台服务器配置配合apache测试一番

服务器配置 : 16核 E5620 @ 2.40GHz 11G内存

业务包含:DB(oracle)和 redis查询, 当有缓存之后,DB不再查询,直接读取redis, 批量查询两个主键

使用apache的ab测试 并发200,20000个请求

golang 并发测试
golang的qps 大约在 9675/s, 最高10200/s 左右 ,cpu利用率高峰在10.6% 上下golang开启了多核, 并且维护了40个redis连接池
image.png
上面php的链接是golang的url重写,为了兼容php的项目

PHP并发测试
php的QPS大约是 1726/s, 最高2100/s 左右, cpu 高峰在50.1% 比较恐怖
image.png
另外也测试了更多主键的批量查询, golang的处理能力降到 4700/s, php到 1078/s, 将ab并发加到400时, php开始出现请求失败的情况,

golang的并发加到2500后,惊讶其表现依然出色, 有怀疑的可以自行测试

上面的测试结果得出的结论: 因多核利用,golang的”多线程”, 还有redis连接池, 使得go在和php并发对比中遥遥领先,处理能力大约是php的4倍

其实也有不少开发者说可以用swoole框架加持php,但swoole的底层还是C,对于学习成本来说还是蛮高的,我个人建议就是尽早学习go或者java吧,毕竟:一个程序员如果不会三两门语言,对自己的未来是完全没有保障的【记住,我说的是程序员,不是工程师!】

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
85 10
|
Go PHP 数据安全/隐私保护
go使用bcrypt方式实现php的password_hash
go使用bcrypt方式实现php的password_hash
126 0
|
2月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
57 10
|
2月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
4月前
|
Go PHP 云计算
如何在PHP代码里面调用Go程序
PHP和Go都是广泛使用的编程语言,但各自具有其独特的优势和特性。
|
6月前
|
关系型数据库 MySQL Go
PHP转Go,框架选什么?
这是一期会引起广泛讨论的内容,不亚于“PHP 是世界上最好的语言”。
|
前端开发 JavaScript Go
2022 软件工程师状况报告:Go 最抢手|开发者最“嫌弃” PHP、Swift、Scala/R/Objective-C
2022 软件工程师状况报告:Go 最抢手|开发者最“嫌弃” PHP、Swift、Scala/R/Objective-C
185 0
2022 软件工程师状况报告:Go 最抢手|开发者最“嫌弃” PHP、Swift、Scala/R/Objective-C
|
PHP 网络架构
PHP的SoapClient选择服务端口
PHP的SoapClient选择服务端口
128 0
|
Go PHP
【GO】关于 a++ 与 ++a 和PHP的对比
【GO】关于 a++ 与 ++a 和PHP的对比
85 0
【GO】关于 a++ 与 ++a 和PHP的对比
|
Web App开发 缓存 JavaScript
服务端 I/O 性能大比拼:Node、PHP、Java 和 Go
在这篇文章,我们将会结合Apache分别比较Node,Java,Go,和PHP,讨论这些不同的语言如何对他们的I/O进行建模,各个模型的优点和缺点,并得出一些初步基准的结论。如果关心你下一个Web应用的I/O性能,那你就找对文章了。,为了理解与I/O密切相关的因素,必须先来回顾在操作系统底层的概念。虽然不会直接处理这些概念的大部分,但通过应用程序的运行时环境你一直在间接地处理他们。而关键在于细节。
338 0
服务端 I/O 性能大比拼:Node、PHP、Java 和 Go