Golang 和 PHP

张雷_edae · · 2989 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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/

博客推荐:(进阶)

Go 语言结构之栈和指针

Go 语言机制之逃逸分析

Go 语言机制之内存分析

Go 语言机制之数据和语法的设计哲学


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:张雷_edae

查看原文:Golang 和 PHP

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2989 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传