写在前面
Go VS PHP 利弊分析
Go 相对 PHP 的优点
- 性能及资源占用: Go在CPU密集型和IO密集型情况下绝大部分场景比PHP要好很多,一般可以节约 70% 以上的资源。
- 可维护性:Go语言可读性好,规范明确,可维护性高于PHP。
- 生态: Go语言生态要比PHP丰富很多,而且很多是官方提供,更加有保障。
Go 相对 PHP 的缺点:
- 安全性: PHP 高于 Go
-
对开发人员的要求: Go 要高于 PHP
-
Go 取代 PHP 是大势所趋
- 如果是新项目建议应该优先选择使用 Go 语言
- 长线看,如果有人力、且重构成本可接受,建议逐步重构 PHP 项目为 Go 项目。
- 掌握 Go 语言在云原生时代有非常大的优势
生态对比
条目 | Go | PHP |
---|---|---|
WEB框架 | http://github.com/avelino/awesome-go#web-frameworks 40个左右 |
http://github.com/ziadoz/awesome-php#frameworks 10个左右 |
依赖管理 | GOD, Go Module | composer |
RPC 框架 | gRPC-go、rpcx、hprose-golang | grpc C 扩展、hprose-php |
代码检查 | http://github.com/avelino/awesome-go#code-analysis |
http://github.com/ziadoz/awesome-php#code-analysis http://github.com/ziadoz/awesome-php#code-quality http://github.com/ziadoz/awesome-php#architectural |
开发测试 | http://github.com/avelino/awesome-go#utilities |
http://github.com/ziadoz/awesome-php#debugging-and-profiling |
单元测试 | http://github.com/avelino/awesome-go#testing |
http://github.com/ziadoz/awesome-php#testing |
页面渲染 | Go 语言自带模板 http://github.com/avelino/awesome-go#template-engines |
http://github.com/ziadoz/awesome-php#templating |
其他对比
条目 | Go | PHP | 结论 |
---|---|---|---|
safety | 1. Go 对底层有更高的控制权限,风险也更高 2. Go 的goroutine 都是平级的,如果使用不当会导致整个程序崩溃,可以通过规范,CR, 代码检查,封装更加安全的用法来保证 3. Go 程序由于是单进程一直运行,可能会存在内存泄露的情况 |
1. PHP 运行模式是单进程模式,单个进程挂到不影响其它的进程 2. PHP 每个请求运行完会主动释放内存,不存在内存泄露问题 3. PHP 的高级功能都需要依赖扩展实现,扩展是 C 写的,开发效率低,开发难度大,不好维护,也存在一些安全性问题,但是无法控制。 |
PHP > Go |
CICD | 需要重启才能上线,所以需要停止服务 | 脚本语言,可以单独文件上线不影响程序运行 | PHP > GO |
语言能力 | Go 语言作为一个更加通用型的语言可以实现: 1. 方便的实现并发控制 2. 语言能力看齐 C/C++, 可以调用很多底层功能 3. 语言可以支持多种交互协议 |
PHP 作为专门为WEB开发而生的语言: 1. 能力集中在业务逻辑开发 2. 高级的功能需要通过C扩展的形式,开发难度大,维护成本高 3. 依赖WEB服务器+ CGI管理,只支持HTTP协议 |
Go > PHP |