PHP与Golang:
1、解释型语言相对编译型语言性能相对较差。当然我们可以借助opcode高速缓存去减低性能差异,另外opcode需要zend虚拟机,java也是有jvm虚拟机,在这方面一定程度可以说PHP是编译型。
如果按照编译是生成二进制码来讲,golang才是编译型。这里有个关键的问题如果没有虚拟机如果实现跨平台??https://juejin.im/post/5dccb05ee51d4510ba708ff1
2、弱类型语言(PHP7有类型限制,array很强大,上述两个方面带来的好处就是降低编程门槛,可以用较少的代码实现我们想要的功能。问题就是如果不遵循一定的编程规范,代码比较飘逸,可维护降低,另外由于要维护较为灵活的结构内存占用也会较大。
golang有较为严谨的语言风格检测,迫使我们统一风格,同时强类型使得我们编程的时候更加注重数据结构的设计,对于系统设计我的理解是有帮助的,当然也不那么易用。
3、同步编程模式带来性能的损耗,降低了实现成本,代码的可读性和维护性较好。异步多线程的场景还是挺多的,如页面展示请求多个接口或者异步通知或日志等,可异步的地方采用同步实现存在性能损耗是必然的,在异步方面我们也可以借助第三方插件(swoole、workerman)或者redis等消息队列的形式来协助实现,采用消息队列的形式来实现某些时候也会增大系统的复杂度。另外php的yeild关键字也可以实现协程的功能,但是实现和维护成本都比较高。
golang在这方面提供了原生的支持,对于协程异步逻辑的封装使得代码的可维护性也较高,性能也更好些。
4、无第三方扩展,某些项目不提供PHP的扩展,在这方面可以选择自己封装(有一定维护成本)或则选择其他同类型的开源项目,问题不是太大。
5、golang很多地方扩展采用多返回参数的形式返回error,时刻提醒开发者要关心异常,做好异常处理。
7、脚本执行完毕之后内存就回收了,连接无法复用也是PHP的一个问题。借助swoole可以实现一个简单的连接池。https://juejin.im/entry/5a5dceea51882573467cfabe
Golang
1、三目运算符不见了。
2、整型没有封装类型,接收json参数的时候定义类型有点严格,传了数字字符串解析报错。
关于不喜欢的地方,有各自见解吧。https://www.infoq.cn/article/1mtvFQX_6K2G3cfeAaRm