当前位置:网站首页>【黄啊码】为什么我建议您选择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吧,毕竟:一个程序员如果不会三两门语言,对自己的未来是完全没有保障的【记住,我说的是程序员,不是工程师!】
边栏推荐
- Binary search tree (basic operation)
- 最新Android面试合集,android视频提取音频
- Lowcode: four ways to help transportation companies enhance supply chain management
- 【DesignMode】享元模式(Flyweight Pattern)
- OpenGL personal notes
- LeetCode 213. Home raiding II daily question
- LeetCode 1626. The best team without contradiction
- DNS 系列(一):为什么更新了 DNS 记录不生效?
- 在哪个期货公司开期货户最安全?
- 掌握这套精编Android高级面试题解析,oppoAndroid面试题
猜你喜欢
使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑
DNS 系列(一):为什么更新了 DNS 记录不生效?
Seaborn数据可视化
【MySql进阶】索引详解(一):索引数据页结构
AI来搞财富分配比人更公平?来自DeepMind的多人博弈游戏研究
Temperature sensor chip used in temperature detector
Master this promotion path and share interview materials
最新阿里P7技术体系,妈妈再也不用担心我找工作了
Interface oriented programming
[medical segmentation] attention Unet
随机推荐
[designmode] flyweight pattern
SqlServer2014+: 创建表的同时创建索引
Test case management tool recommendation
LeetCode 1654. The minimum number of jumps to get home one question per day
ByteDance Android gold, silver and four analysis, Android interview question app
谈谈 SAP 系统的权限管控和事务记录功能的实现
Talk about the realization of authority control and transaction record function of SAP system
最新Android高级面试题汇总,Android面试题及答案
LeetCode 1043. Separate the array to get the maximum and daily questions
QML beginner
Build an all in one application development platform, light flow, and establish a code free industry benchmark
深度监听 数组深度监听 watch
Pychart ide Download
Ray and OBB intersection detection
Localstorage and sessionstorage
[designmode] proxy pattern
Skimage learning (3) -- gamma and log contrast adjustment, histogram equalization, coloring gray images
运算符
正在准备面试,分享面经
Personal notes of graphics (2)