当前位置:网站首页>【黄啊码】为什么我建议您选择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吧,毕竟:一个程序员如果不会三两门语言,对自己的未来是完全没有保障的【记住,我说的是程序员,不是工程师!】
边栏推荐
- 【医学分割】attention-unet
- 如何在博客中添加Aplayer音乐播放器
- LeetCode 1981. Minimize the difference between the target value and the selected element one question per day
- How to add aplayer music player in blog
- SlashData开发者工具榜首等你而定!!!
- [designmode] proxy pattern
- 字节跳动高工面试,轻松入门flutter
- LeetCode 1477. 找两个和为目标值且不重叠的子数组 每日一题
- QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏
- Direct dry goods, 100% praise
猜你喜欢
time标准库
[image sensor] correlated double sampling CDs
Master this set of refined Android advanced interview questions analysis, oppoandroid interview questions
【图像传感器】相关双采样CDS
字节跳动Android金三银四解析,android面试题app
字节跳动Android面试,知识点总结+面试题解析
Temperature sensor chip used in temperature detector
运算符
面向接口编程
Opencv personal notes
随机推荐
模块六
LeetCode 1049. 最后一块石头的重量 II 每日一题
LocalStorage和SessionStorage
偶然升职的内心独白
预售17.9万,恒驰5能不能火?产品力在线,就看怎么卖
LeetCode 1774. The dessert cost closest to the target price is one question per day
skimage学习(1)
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
Reflections on "product managers must read: five classic innovative thinking models"
Interface oriented programming
最新Android面试合集,android视频提取音频
【DesignMode】模板方法模式(Template method pattern)
【PHP】PHP接口继承及接口多继承原理与实现方法
[designmode] facade patterns
Master this set of refined Android advanced interview questions analysis, oppoandroid interview questions
Pychart ide Download
谈谈 SAP 系统的权限管控和事务记录功能的实现
射线与OBB相交检测
LeetCode 213. 打家劫舍 II 每日一题
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配