日韩国产精品99成人不卡在线无毒|狠狠躁夜夜爽一级二级精品|亚洲日日噜噜孕妇中文字幕|日韩久草中文三级片

新聞動態(tài)

作為多年 PHP 的開發(fā)者,在使用了 Go 語言之后......

行業(yè)資訊 發(fā)布者:cya 2020-01-13 08:36 訪問量:348

作者 | Dan Gurgui

譯者 | 彎月,責編 | 屠敏

出品 | CSDN(ID:CSDNnews)


Go 是一種功能強大的編程語言,具有獨特的功能組合。而 PHP 是在服務器端執(zhí)行的腳本語言,與 C 語言類似,是常用的網(wǎng)站編程語言,同時適用于所有微服務、小型、中型乃至大型應用程序。對于開發(fā)者而言,兩者在使用過程中,有哪些不同的體驗?本文即將為大家揭曉。
16歲的時候,我發(fā)現(xiàn)了PHP。這是我學習的第一門編程語言。當時,我利用PHP來檢查用戶提交的表單并發(fā)送電子郵件,大多數(shù)表單都是“聯(lián)系我們”。多年以來,我始終將PHP作為我的強項,且堅持不懈地發(fā)展壯大自己的PHP知識和技能。雖然我覺得自己算不上PHP高手,但這是我最了解的編程語言。以前,我曾有機會在小型項目中使用Ruby、Java、Python和NodeJS。我通過這些經(jīng)驗比較PHP和其他編程語言,了解如何更好地利用PHP的優(yōu)點并克服它的缺點。
6個月前,我成為了 MessageBird 的一名工程師。申請工作的時候,我填寫了PHP,但是我沒想到入職后我就開始使用 GoLang,而且與PHP漸行漸遠。這種一次很好的經(jīng)歷,在這段時間里,我學習了一種新的編程語言,而如今我又回到了PHP,同時我還擁有6個月的Go編程經(jīng)驗。 
Go是一種功能強大的編程語言,具有獨特的功能組合。我很遺憾沒能更深入地學習Go。我返回PHP的原因與編程語言本身無關(guān),但是,我想總結(jié)一下這6個月的經(jīng)驗,并比較一下這兩種語言。

靜態(tài)與動態(tài)

GoLang是一種靜態(tài)編程語言,不像PHP那樣是動態(tài)的。因此,你需要在初始化變量和對象時提前想清楚。在PHP中,你永遠不會初始化變量,需要時當場使用就可以了。因此,在聲明一個新變量之前,對于GoLang而言你需要三思而后行,我發(fā)現(xiàn)這比在PHP中檢查變量的做法更有效率。PHP 7添加了類型聲明,這是一個更好的實踐,但是在編寫代碼之前三思而后行是一種更健康的做法。

子程序與并行處理

GoLang 非常神奇的功能之一就是goroutine。這個功能支持異步運行功能。PHP中沒有任何功能與Goroutines的簡單性和易用性相提并論。每當需要在PHP中進行并行處理時,你都需要添加外部的排隊機制(Beanstalk、RabbitMQ等)。這會加劇基礎(chǔ)架構(gòu)的復雜性,并增加項目的復雜性。
GoLang的并行處理遠遠超越了PHP。

面向?qū)ο蠊δ?/strong>

自從編程問世以來,面向?qū)ο蟮母拍钜恢睋碛幸幌亍?0年代,面向?qū)ο笤贑++中得到了廣泛應用,也因此成為了主流范式。面向?qū)ο笞钗业牡胤皆谟?,它允許工程師使用代碼創(chuàng)建業(yè)務邏輯圖,事實證明,當不斷發(fā)展的系統(tǒng)發(fā)生變化時,這種做法提供的價值無可限量。PHP和GoLang都提供面向?qū)ο蟮墓δ?,但是,這兩種語言之間存在很大差異。
我花了很長時間才習慣了隱式接口。在GoLang中,在實現(xiàn)所有方法后,類型就會滿足接口要求。但在PHP中,你需要顯式地定義類型所需的接口,然后開始實現(xiàn)。有了Go的這一功能,你不需要提前思考應用程序的接口,這一點與我對靜態(tài)類型語言的認知正好相反。
不斷發(fā)展的模型具有復雜的需求,而領(lǐng)域驅(qū)動的設(shè)計可以滿足這種需求。為此,你需要許多面向?qū)ο蟮墓δ埽琍HP也的確提供了許多這樣的功能:trait、抽象方法和類,final方法和類,魔術(shù)方法等等。GoLang缺少這些功能,這是一個難以克服的限制條件。因此,我認為GoLang僅適用于微服務或小型應用程序,而PHP適用于所有微服務、小型、中型乃至大型應用程序。

測試 

我認為,在決定項目質(zhì)量方面,測試是最重要的工作:單元測試、集成測試、功能測試、UI測試、性能測試等等,項目擁有的測試越多,交付的質(zhì)量就越好。GO和PHP的單元測試框架都很出色,Go擁有嵌入式測試包,而PHP有 PHPUnit,它們都提供了一組豐富的功能,可用于測試你的代碼。PHPUnit的功能比GoLang測試包更多,因為PHP的功能更多。這兩種工具都可以完成編程語言的工作。然而, 在進行高級測試時,PHP和Go就會表現(xiàn)出很大的不同。
首先,對于性能測試,Go的測試包中擁有很多性能測試的功能。pprof 等許多庫都可以使用這些功能來創(chuàng)建華麗的數(shù)據(jù)報告。雖然PHP也有一套可用于性能測試的庫和技術(shù),但Go的更加易于使用。我相信這是靜態(tài)類型語言的優(yōu)勢之一。
其次,對于高級測試技術(shù)(例如BDD、TDD和A/B測試),PHP擁有更多支持、更多庫,還有一個更大的社區(qū)。例如,兩種語言都實現(xiàn)了Cucumber(或Gherkin),但是PHP 的 BEHAT 實現(xiàn)支持40多種語言,是完全基于獨立組件構(gòu)建的,而且在GitHub上的支持比Cucumber更多(更多分支、更多給星等等)。 
最后,對于功能測試或UI測試,PHP的庫更多,且對現(xiàn)有工具的支持更好。Selenium 擁有非常強大的PHP支持(3000多個跨瀏覽器測試、視頻記錄、文本和可視日志等),而對于Go來說,只有一個沒有良好維護的驅(qū)動程序 tebeka / selenium(最后一次提交發(fā)生在5個月前)。

其他差異

兩種語言之間還有許多其他差異,重點包括:

  • GoLang 的性能比PHP更好。我們有數(shù)百種基準,可以在各種情況下測試 PHP 和 GoLang,但大多數(shù)時候明顯都是 GoLang 勝出。最重要的是,Go的開發(fā)速度很快:測試運行速度更快、內(nèi)存使用效率更高、CPU使用率更低。
  • PHP社區(qū)的人數(shù)遠遠超過了 GoLang,而且支持非常出色。我發(fā)現(xiàn) GoLang 使用了許多糟糕的東西,例如代碼生成器,這都是PHP社區(qū)幾年前拋棄的東西。
  • 打包維護也很不相同。在GoLang中,打包維護是內(nèi)部管理的;而PHP有兩層不同的實現(xiàn)方式:第一,PHP擴展級別;第二,每個人都使用的庫級別。PHP的情況更為復雜,而go則將兩層管理放到了一起。


最后一點想法

這兩種語言有明顯的區(qū)別,在兩者之間做選擇非常容易。GoLang 的性能更好,擁有原生異步功能以及其他基本功能,非常適合需要頻繁使用的小型應用程序和微服務。
然而,隨著應用程序的不斷增長,業(yè)務邏輯復雜度加劇的情況下,PHP是很自然的選擇,因為你可以充分利用PHP的面向?qū)ο蠊δ芎蜕鐓^(qū)支持。



關(guān)鍵字: GO語言 PHP 開封晨展科技

文章連接: http://www.hsjyfc.com.cn/hyzx/679.html

版權(quán)聲明:文章由 晨展科技 整理收集,來源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請聯(lián)系我們,我們會立即刪除。如轉(zhuǎn)載請保留