Golang 和 PHP
PHP是我们的初恋情人!
我的第一次(编写生产级项目)给了PHP,PHP给予了我们工作,帮助我们走进来实践软件工程的大门,按正常逻辑来说我应该PHP幸福的走下去。但是我就是一个花心的developers,相处的5年中我一直在不停的勾三搭四,一会儿撩撩JAVA大姐姐,一会儿又撩撩Python小姐姐,最近我觉得隔壁Golang发育的越发楚楚动人。嘻嘻 大概打量了一番觉得Golang还真“不赖”,和我家PHP比起来各有特色。哈哈 以后就可以三个人幸福的相处下去了。
1. 标记 @号代表可作为讨论内容
想知道Golang 和 PHP 到底有哪些区别,首先要知道从哪些方面来对比。
语言层面 :
Golang : 编译语言
1.编译成二进制文件可以直接在系统中运行
2.不依赖其他环境,不挑剔
3.执行效率高
PHP : 解释语言 (@权威解释参考官方文档或敬请xinge大佬分析)
FPM模型:每次请求的时候动态进行词法分析、语法解析,然后在Zend虚拟机上运行,再由 Zend引擎实时编译成机器码执行
CLI模式: 是单进程模式在程序启动的仅执行一次词法分析和语法解析,再由Zend引擎编译成机器码执行,这里有个讨论点:(@CLI模式只会执行一次词法分析和语法解析,为什么PHP不用CLI模式运行呢?)
语法层面 :
面向对象(OOP):
Golang 提倡面向接口编程,因为Golang具备特殊的对象实现方式,但是Golang并没有提供类的概念,Golang中的类是通过struct结构体来实现,不符合面向对象编程的程序员认知。
PHP 支持函数式编程并支持面向对象编程,从PHP4版本后支持的反射机构能够让PHP具备很好的实现依赖注入功能,对程序设计和解耦帮助非常之大
数据类型:
Golang是强类型语言:
优点:
1.将类型的范围划分的更加明确,在变量的初始化时分配内存空间更加合理
2.数据类型更加安全,弱类型语言在类型对比和转换时存在安全问题
3.编辑器和编译器在安全提示会更好,便于及早发现问题
缺点:
1.每个变量都需要声明类型,书写麻烦
2.需要考虑每个变量选择合适的类型和大小,如果变量的范围没有选择好,编译期间不会报错,会造成运行时错误。
PHP是弱类型语言:
优点:
1.不用考虑变量类型编写方便
2.同一个变量可以赋值多种类型
3.数组类型具备非常强大的功能
缺点:
1.变量对比不安全
2.内存空间浪费
高并发:
Golang 天生就是未高并发而生的,这其实得益于Go的协成设计模型(GMP)。在协程(goroutine)间通信采用通信共享内存思想(channel 其实一个队列)来保证安全高效的数据互通,提供“互斥锁”,“读锁”和“写锁”来并发安全,推荐使用“读写锁”。Golang 适合做微服务。
PHP在高并发方面是一直被我们所诟病的。这个PHP目前绝大数的使用场景有关,因为PHP开发快速,目前主要的应用领域就是在WEB服务端方面,而我们通常采用的是LNMP,LNMP中的FPM则是限制PHP性能主要原因。目前PHP也可以通过Swoole扩展实现高并发,目前Swoole的发展趋势还非常不错,其中Hyperf框架非常出色。
开发效率:
Golang 语法简单,上手快,并发实现简单,单元测试和性能测试非常方便。
PHP 语法简单,支持面向对象,开发效率高,但是在高并发方面学习稍高
生态层面:
Golang 1.大厂推动使用,2.社区活跃度高,3.go mod 包依赖管理 4.搭建私服简单 5.新兴独角兽公司追捧 6.不错的框架支持(beego 和 gin)7.微服务支持不错 8.文档齐全完善
PHP 1. 目前
应用前景:1.文档完善(内核文档、使用手册、swoole手册) 2.框架完善(Laravel,ThinkPHP) 3.composer包管理完善 4.技术方案成熟 但是对微服务支持不好
前景层面:
服务端开发
分布式系统,微服务
网络编程
区块链开发
内存KV数据库,例如boltDB、levelDB
云平台
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
目前的招聘需求大待遇相对好些
PHP目前处于一个不温不火的现状,这实在让人觉得不舒服。
讨论模块:
Golang学习资料推荐:
学习笔记文档:http://www.topgoer.com/
博客推荐:(进阶)