1. 
          

          1. 新聞動(dòng)態(tài)

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

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

            作者 | Dan Gurgui

            譯者 | 彎月,責編 | 屠敏

            出品 | CSDN(ID:CSDNnews)


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

            靜態(tài)與動(dòng)態(tài)

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

            子程序與并行處理

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

            面向對象功能

            自從編程問(wèn)世以來(lái),面向對象的概念一直擁有一席之地。90年代,面向對象在C++中得到了廣泛應用,也因此成為了主流范式。面向對象最吸引我的地方在于,它允許工程師使用代碼創(chuàng )建業(yè)務(wù)邏輯圖,事實(shí)證明,當不斷發(fā)展的系統發(fā)生變化時(shí),這種做法提供的價(jià)值無(wú)可限量。PHP和GoLang都提供面向對象的功能,但是,這兩種語(yǔ)言之間存在很大差異。
            我花了很長(cháng)時(shí)間才習慣了隱式接口。在GoLang中,在實(shí)現所有方法后,類(lèi)型就會(huì )滿(mǎn)足接口要求。但在PHP中,你需要顯式地定義類(lèi)型所需的接口,然后開(kāi)始實(shí)現。有了Go的這一功能,你不需要提前思考應用程序的接口,這一點(diǎn)與我對靜態(tài)類(lèi)型語(yǔ)言的認知正好相反。
            不斷發(fā)展的模型具有復雜的需求,而領(lǐng)域驅動(dòng)的設計可以滿(mǎn)足這種需求。為此,你需要許多面向對象的功能,PHP也的確提供了許多這樣的功能:trait、抽象方法和類(lèi),final方法和類(lèi),魔術(shù)方法等等。GoLang缺少這些功能,這是一個(gè)難以克服的限制條件。因此,我認為GoLang僅適用于微服務(wù)或小型應用程序,而PHP適用于所有微服務(wù)、小型、中型乃至大型應用程序。

            測試 

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

            其他差異

            兩種語(yǔ)言之間還有許多其他差異,重點(diǎn)包括:

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


            最后一點(diǎn)想法

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



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

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

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

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.