当前位置:网站首页>【黄啊码】为什么我建议您选择go,而不选择php?
【黄啊码】为什么我建议您选择go,而不选择php?
2022-07-07 15:34:00 【黄啊码】
【来句老梗: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连接池
上面php的链接是golang的url重写,为了兼容php的项目
PHP并发测试
php的QPS大约是 1726/s, 最高2100/s 左右, cpu 高峰在50.1% 比较恐怖
另外也测试了更多主键的批量查询, golang的处理能力降到 4700/s, php到 1078/s, 将ab并发加到400时, php开始出现请求失败的情况,
golang的并发加到2500后,惊讶其表现依然出色, 有怀疑的可以自行测试
上面的测试结果得出的结论: 因多核利用,golang的”多线程”, 还有redis连接池, 使得go在和php并发对比中遥遥领先,处理能力大约是php的4倍
其实也有不少开发者说可以用swoole框架加持php,但swoole的底层还是C,对于学习成本来说还是蛮高的,我个人建议就是尽早学习go或者java吧,毕竟:一个程序员如果不会三两门语言,对自己的未来是完全没有保障的【记住,我说的是程序员,不是工程师!】
边栏推荐
猜你喜欢
随机推荐
[designmode] template method pattern
LeetCode 1696. 跳跃游戏 VI 每日一题
Personal notes of graphics (3)
ByteDance Android gold, silver and four analysis, Android interview question app
Personal notes of graphics (4)
最新Android面试合集,android视频提取音频
LeetCode 1049. Weight of the last stone II daily question
LeetCode 312. 戳气球 每日一题
正在准备面试,分享面经
Inner monologue of accidental promotion
dapp丨defi丨nft丨lp单双币流动性挖矿系统开发详细说明及源码
深度监听 数组深度监听 watch
【Seaborn】组合图表:PairPlot和JointPlot
Pychart ide Download
LeetCode 1477. Find two subarrays with sum as the target value and no overlap
LeetCode 1043. 分隔数组以得到最大和 每日一题
QT视频传输
Opencv configuration 2019vs
ATM系统
DNS 系列(一):为什么更新了 DNS 记录不生效?