Golang與Python,哪種程式語言更適合您?

Golang與Python,哪種程式語言更適合您?

51CTO官微

技術資訊/行業精華/產品心得

在開始任何專案之前,大多數開發團隊都會通過幾輪會議,來決定他們將對軟體使用何種最佳程式語言。而在多數時候,此類討論最後會歸結於是使用Python、還是Golang語言。在本文中,我將比較這兩種語言的如下各個方面,這些方面的引數將能夠幫助您判定出哪一種語言更適合您的手頭專案。

效能

可擴充套件性

實際應用

執行方式

程式庫

程式碼可讀性

在開始比較Golang與Python之前,讓我們先簡單介紹一下這兩種語言的特點。

什麼是Golang?

Golang與Python,哪種程式語言更適合您?

Golang,也稱為Go,是由Google公司開發的一種計算機程式語言。Google在2007年就開發了該語言,並於2009年向公眾推出。其三位主要開發人員分別是Robert Griesemer、Rob Pike和Ken Thompson。他們的目標是建立一種新的語言,既能夠鬆散地基於C語言語法,又能夠消除由C++等語言所產生的“額外垃圾(extraneous garbage)”。因此,Go被賦予了其他現代語言的許多功能,例如:方法和運算子的過載,指標演算法,以及型別繼承。如今,該語言已經發展成為了一種靜態型別的語言,它既有精緻且強大的資源庫,又有無與倫比的效能與速度。

Go語言介紹到此,現在讓我們來看看Python。

什麼是Python?

Golang與Python,哪種程式語言更適合您?

Python是一種通用的程式語言,能夠實現幾乎任何一種專案需求。它由荷蘭程式設計師Guido van Rossum所建立,並於1991年首次釋出。Python最主要的特點在於它是一種解釋型語言。也就是說,那些編寫好的程式碼實際上並沒有在執行時,被轉換為計算機可讀的格式。而大多數程式語言在編譯程式時都需要執行此類轉換。由於它最初被用於一些瑣碎性的專案,因此這種語言也被稱為“指令碼語言”。

至此,我們已對這兩種語言進行了粗略的介紹,下面讓我們來對它們進行各個方面的比較。

效能

首先,我們從解決複雜數學函式的角度,來比較這兩種語言對於記憶體的使用程度,以及解決問題所花費的時間。

如下圖所示,我們使用它們分別來處理三個不同型別的問題,即:Mandelbrot等式、n body問題和fasta格式。這些都是非常複雜的問題,它們不但需要大量的計算,而且可以作為測試相關語言效能與記憶體管理的完美方案。下面便是Golang和Python在耗時與記憶體單元使用量方面的資料。

Golang與Python,哪種程式語言更適合您?

我們可以清楚地看到,Golang在效能方面勝過了Python。

下面我們繼續從可擴充套件性的角度來進行比較。

可擴充套件性

如今,構建真正可擴充套件的應用程式可謂是一項技術活。如果您的軟體應用無法按需擴充套件的話,則可能會對業務產生一些不利的影響。由於Golang是由Google所開發,旨在幫助其成千上萬的開發程式設計師,解決部署在數千個叢集上,大型託管伺服器軟體的擴充套件性問題,因此Golang內建了對併發程序通道(如併發性)的支援。相對而言,Python在併發性方面的支援則比較費勁,它只能透過多個執行緒來實現並行性。

下面讓我們來理解一下併發性(concurrency)和並行性(parallelism)之間的區別。

併發性和並行性

併發性意味著:應用程式同時在多個任務上同時(併發地)運作。因此,如果某臺計算機只有一顆CPU,那麼其應用程式可能無法在同一時間、在多個任務上“推進工作”。不過,應用程式在內部,則可以一次性處理多個任務。而且,在下一個任務開始之前,它並不需要全部完成當前的任務。

Golang與Python,哪種程式語言更適合您?

並行性意味著:應用程式將其任務分割成較小的多個子任務,這些子任務可以被並行處理,例如:在同一時間點上,程式可以分配給多個CPU。

Golang與Python,哪種程式語言更適合您?

因此,顯而易見的是:只有那種“天生”就能支援併發性的語言,才更適合於大型、且需要具備可擴充套件性的軟體程式。

下面,讓我們繼續比較這兩種語言的實際應用。

實際應用

由於每種程式語言都有各自特定的應用場景,因此在實際應用中,兩者並無明顯的優劣。正如Javascript主要被用於Web開發那樣,Python如今已被廣泛地應用在資料分析、人工智慧、深度學習、以及Web開發等領域。當然,這些都歸功於Python擁有的強大程式庫,它們能夠被開發人員輕鬆且靈活地使用到。

另一方面,Golang主要被用於各種系統的程式設計場景。由於支援併發性,因此它在雲計算和叢集計算領域,得到了大量的使用與接受。同樣憑藉著其強大且易用的程式庫,Golang在Web開發中也獲得了許多讚賞和應用。您完全可以在幾秒鐘內構建出一臺Web伺服器。

執行方式

現在讓我們來比較Go程式碼與Python程式碼的執行方式。首先,由於Python是一種動態型別的語言,而Golang是一種靜態型別的語言,因此Python和Go分別使用的是直譯器(interpreter)和編譯器(compiler)。

既然上面提到了靜態型別語言和動態型別語言,下面我們來理解一下兩者之間的區別:靜態型別語言是一種需要為編譯器顯式地宣告變數型別的語言。因此我們很容易捕獲到程式中的瑣碎錯誤。而動態型別語言在使用變數前不需要宣告變數,而全部交給直譯器去“打理”,因此如果出現直譯器無法正確解釋的內容,此類錯誤則會一直遺留在程式中。

總的說來,由於Python是一種動態型別語言,因此如果程式設計師想用它來構建超大型專案程式的話,會受到一定的限制;而Go語言則可以處理這兩種型別的程式。

接著,讓我們來討論一下它們的程式庫。

程式庫

Golang與Python,哪種程式語言更適合您?

眾所周知,程式庫能夠減輕開發人員的重複性工作。因此,擁有一個豐富的程式語言庫,對於各類專案的開發是至關重要的。如上圖所示,Python帶有大量可用的程式庫。其中,諸如Numpy之類的軟體包可以幫助使用者實現各種陣列的處理,以及複雜的矩陣函式。另外,Tensorflow和Scikit Learn可被用於深度學習,OpenCV可被用於影象處理,Pandas可被用於資料分析,而matplotlib則可被用於視覺化等方面。毫不誇張地說,Python庫的豐富程度足以讓您應接不暇。

不過,這並不意味著Go在此方面甘拜下風。在對Go語言進行開發時,Google選擇了將那些最重要的庫作為其內建Go庫的一部分。雖然其數量上不如Python那樣龐大,但是它們所涵蓋的使用領域也幾乎是相同的。利用這些廣泛的程式庫,您可以實現各種型別的Web開發,資料庫處理,併發程式設計,以及加密等操作。

最後,讓我們來比較一下兩者的可讀性。

程式碼可讀性

在為客戶開發某個軟體專案時,您可能會與上十個、甚至是數百個開發人員協同工作。那麼在這種情況下,程式碼的可讀性就顯得非常重要且值得謹慎對待了。

許多人肯定認為Python會在此處勝出,但是我卻持有不同的意見。乍一看來,Python確實具有出色的可讀性,但是它難免有些過猶不及了。在Python中,開發人員可以用十種不同的方式來表達某個相同的事物。而這通常會導致程式碼的冗長,或者會讓不同程式碼接手人員產生不必要的混淆。

作為對比,Go語言在程式設計方面有著嚴格的規則。它既不允許開發人員匯入不必要的程式庫,又不允許建立各種不必要的變數。這就意味著:我們可以用一種確定的方法去執行各項任務,以便大型的專案組能夠更好地理解程式程式碼。部分新手開發人員可能會對Go程式碼的多功能性望而生畏,但是在實際用它來進行核心程式設計的時候,誰又會真正去關心它的多功能性呢?儘管Golang的語法對於初學者來說並不那麼友好,但它也不至於像C或C++那樣“高攀不起”。因此,為了便於閱讀程式碼,我時常會選擇使用Golang。

綜上所述,Golang在大多數情況下會略佔上風。並且在我看來,作為一種程式語言,它已經勝過了Python。當然,不可否認的是:經過多年的發展,Python已在網際網路上積累了大量的人氣,並在軟體專案中屢屢出現。不過可喜的是,Go語言也正在此方面迎頭趕上。同時,我歡迎您發表不同的意見。

原文標題:Golang vs。 Python: Which One to Choose?,作者:Aryya Paul

51CTO譯稿,合作站點轉載請註明原文譯者和出處為51CTO。com