[精選]當PHP遇上Go會怎樣?GO語言彌補了PHP的不足,然後。。。

Weiwen發表於2022-09-09

七年來,從PHP被其他語言冷嘲熱諷到由中國人惠新宸參與核心開發的php7橫空出世以及到目前已經發布的PHP8,在效能方面也提高了不少,但是漸漸的趨向完善與穩定。我們先來看看PHP有多完善?

完善的物件導向程式設計支援,主要包括

  • namespace 處理命名衝突

  • interface 分離實現與介面

  • traits 程式碼混入(mixin)支援

  • 型別系統 限制函式引數、返回值、類成員的型別

完善的依賴管理體系,這一點主要由 composer 實現。

支援 FFI(foreign function interface),可以很方便的跟各種C語言庫(如 TensorFlow)互動,極大地擴充套件了 PHP 的能力。

更加安全,主要是引入了更加現代更加安全的密碼學類庫 libsodium。

效能不斷提升,PHP7.4的效能大約是PHP5.6的3倍,比PHP7.0也快了近18%。主要的效能提升來自於PHP7.0的zval重構。

而PHP7.4也能過引入 preload 特性進一步加快了程式碼的執行速度。PHP8.0 也引入了 JIT 技術,效能也有了更大的提升。

然後這些都是php的優點,那也不要忽略了php的缺點

  1. 不支援泛型。程式設計師無法限制PHP的陣列的成員型別。

  2. 執行時型別檢查。PHP的引數型別檢查是在程式碼執行的過程完成的,降低了執行效率。

  3. 不支援多核。PHP虛擬機器就是一個C語言的 while 迴圈,邊讀取邊執行。如果想跑滿多核,只能利用多程式或都多執行緒,多執行緒存在同步問題,多程式存在IPC問題。

  4. PHP本身和擴充套件都使用C語言開發,要想深入理解PHP,單寫PHP程式碼是不夠的。這在一定程度上增加了改進PHP的門檻。

而 go 語言恰恰是解決了這些問題

  1. 支援基本的的範型 slice 和 map 都支援指定型別

  2. 編譯時型別檢查,沒有執行時開銷

  3. 基於執行緒實現協程,先天支援多核

  4. 使用 go 語言自舉,編譯器和執行時本身由 go 語言加少量組合語言開發,只要熟悉 go 語言就可以深入研究編譯器和執行時程式碼

  5. 支援型別推導,開發體驗跟 php 這種動態語言類似

GO語言是一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。

隨著網際網路企業進入三高時代,企業對程式設計師的技術要求也越來越高,很多團隊會引入 Golang到在專案運作中,這不僅會提升效能,還能在原有基礎上改變可擴充套件性,並且執行速度提高將近幾十倍。GO語言與PHP的完美結合,取長補短,既滿足高效率開發又能彌補效能優勢。

當在PHP開發中用到GO語言,不僅對效能大大提升。它加入了併發程式設計,多執行緒程式設計、其中涉及到大資料、雲端計算、微服務架構等領域,而且將伺服器總數減少了近三分之二,節省了大量工作成本和伺服器成本。

PHP與Go語言結合契合了大廠在招聘中的技術要求,PHP+GO雙劍合璧讓你如魚得水!進可攻退可守:既能滿足一線大廠的要求,也不阻礙你在二三四線城市的中小廠用PHP謀求一份高薪的工作!

最近在面試中,搜尋了很多企業招聘php的崗位職責,比如是3-5年經驗的,且公司的專案有涉及到高併發,直播,短影片,遊戲等的,基本都是要你會GoLang。這也是PHP學到高階的時候必須要會的。

總結

當你用php用到一定水平的時候,你就會知道它有哪些不足了,然而你也會發現為什麼很多人最後都要去學習swoole並且去用好它,或者最後都要去學習go語言。

語言只是一門工具,說白了就是以後你用來養家餬口的,甚至用來創造更多。。。作為用了7年多的php的我,如果還是要在php這個行業繼續穩定下去,除了一些輔助的擴充套件語言要會(docker,Mq,MongoDB等),你還要會swoole,甚至是go語言等一些正好彌補php不足的語言

個人覺得php是最容易入門的語言,以前是這樣,現在也是這樣。php會了(語言語法相當),你還怕Go語言學不會嗎?

技多不壓身,多學一門語言,況且是兩語言可以組合著用的,沒什麼不好,而不是你們總是說的我轉Go語言了!!

你們PHPer學GO會怎樣???

本作品採用《CC 協議》,轉載必須註明作者和本文連結
最美的不是下雨天,而是和你一起躲過的屋簷!

相關文章