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