自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

譯文
開發(fā) 后端
在本文中,我們將比較Golang與Python兩種語言的各個(gè)方面,希望您能籍此做出合適的選擇。

【51CTO.com快譯】在開始任何項(xiàng)目之前,大多數(shù)開發(fā)團(tuán)隊(duì)都會(huì)通過幾輪會(huì)議,來決定他們將對(duì)軟件使用何種***編程語言。而在多數(shù)時(shí)候,此類討論***會(huì)歸結(jié)于是使用Python、還是Golang語言。在本文中,我將比較這兩種語言的如下各個(gè)方面,這些方面的參數(shù)將能夠幫助您判定出哪一種語言更適合您的手頭項(xiàng)目。

  • 性能
  • 可擴(kuò)展性
  • 實(shí)際應(yīng)用
  • 執(zhí)行方式
  • 程序庫
  • 代碼可讀性

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

什么是Golang?

 

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

Golang,也稱為Go,是由Google公司開發(fā)的一種計(jì)算機(jī)編程語言。Google在2007年就開發(fā)了該語言,并于2009年向公眾推出。其三位主要開發(fā)人員分別是Robert Griesemer、Rob Pike和Ken Thompson。他們的目標(biāo)是創(chuàng)建一種新的語言,既能夠松散地基于C語言語法,又能夠消除由C++等語言所產(chǎn)生的“額外垃圾(extraneous garbage)”。因此,Go被賦予了其他現(xiàn)代語言的許多功能,例如:方法和運(yùn)算符的重載,指針?biāo)惴?,以及類型繼承。如今,該語言已經(jīng)發(fā)展成為了一種靜態(tài)類型的語言,它既有精致且強(qiáng)大的資源庫,又有***的性能與速度。

Go語言介紹到此,現(xiàn)在讓我們來看看Python。

什么是Python?

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

Python是一種通用的編程語言,能夠?qū)崿F(xiàn)幾乎任何一種項(xiàng)目需求。它由荷蘭程序員Guido van Rossum所創(chuàng)建,并于1991年***發(fā)布。Python最主要的特點(diǎn)在于它是一種解釋型語言。也就是說,那些編寫好的代碼實(shí)際上并沒有在運(yùn)行時(shí),被轉(zhuǎn)換為計(jì)算機(jī)可讀的格式。而大多數(shù)編程語言在編譯程序時(shí)都需要執(zhí)行此類轉(zhuǎn)換。由于它最初被用于一些瑣碎性的項(xiàng)目,因此這種語言也被稱為“腳本語言”。

至此,我們已對(duì)這兩種語言進(jìn)行了粗略的介紹,下面讓我們來對(duì)它們進(jìn)行各個(gè)方面的比較。

性能

首先,我們從解決復(fù)雜數(shù)學(xué)函數(shù)的角度,來比較這兩種語言對(duì)于內(nèi)存的使用程度,以及解決問題所花費(fèi)的時(shí)間。

如下圖所示,我們使用它們分別來處理三個(gè)不同類型的問題,即:Mandelbrot等式、n body問題和fasta格式。這些都是非常復(fù)雜的問題,它們不但需要大量的計(jì)算,而且可以作為測(cè)試相關(guān)語言性能與內(nèi)存管理的***方案。下面便是Golang和Python在耗時(shí)與內(nèi)存單元使用量方面的數(shù)據(jù)。

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

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

下面我們繼續(xù)從可擴(kuò)展性的角度來進(jìn)行比較。

可擴(kuò)展性

如今,構(gòu)建真正可擴(kuò)展的應(yīng)用程序可謂是一項(xiàng)技術(shù)活。如果您的軟件應(yīng)用無法按需擴(kuò)展的話,則可能會(huì)對(duì)業(yè)務(wù)產(chǎn)生一些不利的影響。由于Golang是由Google所開發(fā),旨在幫助其成千上萬的開發(fā)程序員,解決部署在數(shù)千個(gè)集群上,大型托管服務(wù)器軟件的擴(kuò)展性問題,因此Golang內(nèi)置了對(duì)并發(fā)進(jìn)程通道(如并發(fā)性)的支持。相對(duì)而言,Python在并發(fā)性方面的支持則比較費(fèi)勁,它只能通過多個(gè)線程來實(shí)現(xiàn)并行性。

下面讓我們來理解一下并發(fā)性(concurrency)和并行性(parallelism)之間的區(qū)別。

并發(fā)性和并行性

并發(fā)性意味著:應(yīng)用程序同時(shí)在多個(gè)任務(wù)上同時(shí)(并發(fā)地)運(yùn)作。因此,如果某臺(tái)計(jì)算機(jī)只有一顆CPU,那么其應(yīng)用程序可能無法在同一時(shí)間、在多個(gè)任務(wù)上“推進(jìn)工作”。不過,應(yīng)用程序在內(nèi)部,則可以一次性處理多個(gè)任務(wù)。而且,在下一個(gè)任務(wù)開始之前,它并不需要全部完成當(dāng)前的任務(wù)。

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

并行性意味著:應(yīng)用程序?qū)⑵淙蝿?wù)分割成較小的多個(gè)子任務(wù),這些子任務(wù)可以被并行處理,例如:在同一時(shí)間點(diǎn)上,程序可以分配給多個(gè)CPU。

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

因此,顯而易見的是:只有那種“天生”就能支持并發(fā)性的語言,才更適合于大型、且需要具備可擴(kuò)展性的軟件程序。

下面,讓我們繼續(xù)比較這兩種語言的實(shí)際應(yīng)用。

實(shí)際應(yīng)用

由于每種編程語言都有各自特定的應(yīng)用場(chǎng)景,因此在實(shí)際應(yīng)用中,兩者并無明顯的優(yōu)劣。正如Javascript主要被用于Web開發(fā)那樣,Python如今已被廣泛地應(yīng)用在數(shù)據(jù)分析、人工智能、深度學(xué)習(xí)、以及Web開發(fā)等領(lǐng)域。當(dāng)然,這些都?xì)w功于Python擁有的強(qiáng)大程序庫,它們能夠被開發(fā)人員輕松且靈活地使用到。

另一方面,Golang主要被用于各種系統(tǒng)的編程場(chǎng)景。由于支持并發(fā)性,因此它在云計(jì)算和集群計(jì)算領(lǐng)域,得到了大量的使用與接受。同樣憑借著其強(qiáng)大且易用的程序庫,Golang在Web開發(fā)中也獲得了許多贊賞和應(yīng)用。您完全可以在幾秒鐘內(nèi)構(gòu)建出一臺(tái)Web服務(wù)器。當(dāng)然,如果你對(duì)Go想進(jìn)行深入的學(xué)習(xí)與研究的話,請(qǐng)查看我們?yōu)槟鷾?zhǔn)備的Golang教程--https://dzone.com/articles/golang-tutorial-learn-golang-by-examples。

執(zhí)行方式

現(xiàn)在讓我們來比較Go代碼與Python代碼的執(zhí)行方式。首先,由于Python是一種動(dòng)態(tài)類型的語言,而Golang是一種靜態(tài)類型的語言,因此Python和Go分別使用的是解釋器(interpreter)和編譯器(compiler)。

既然上面提到了靜態(tài)類型語言和動(dòng)態(tài)類型語言,下面我們來理解一下兩者之間的區(qū)別:靜態(tài)類型語言是一種需要為編譯器顯式地聲明變量類型的語言。因此我們很容易捕獲到程序中的瑣碎錯(cuò)誤。而動(dòng)態(tài)類型語言在使用變量前不需要聲明變量,而全部交給解釋器去“打理”,因此如果出現(xiàn)解釋器無法正確解釋的內(nèi)容,此類錯(cuò)誤則會(huì)一直遺留在程序中。

總的說來,由于Python是一種動(dòng)態(tài)類型語言,因此如果程序員想用它來構(gòu)建超大型項(xiàng)目程序的話,會(huì)受到一定的限制;而Go語言則可以處理這兩種類型的程序。

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

程序庫

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

眾所周知,程序庫能夠減輕開發(fā)人員的重復(fù)性工作。因此,擁有一個(gè)豐富的編程語言庫,對(duì)于各類項(xiàng)目的開發(fā)是至關(guān)重要的。如上圖所示,Python帶有大量可用的程序庫。其中,諸如Numpy之類的軟件包可以幫助用戶實(shí)現(xiàn)各種數(shù)組的處理,以及復(fù)雜的矩陣函數(shù)。另外,Tensorflow和Scikit Learn可被用于深度學(xué)習(xí),OpenCV可被用于圖像處理,Pandas可被用于數(shù)據(jù)分析,而matplotlib則可被用于可視化等方面。毫不夸張地說,Python庫的豐富程度足以讓您應(yīng)接不暇。

不過,這并不意味著Go在此方面甘拜下風(fēng)。在對(duì)Go語言進(jìn)行開發(fā)時(shí),Google選擇了將那些最重要的庫作為其內(nèi)置Go庫的一部分。雖然其數(shù)量上不如Python那樣龐大,但是它們所涵蓋的使用領(lǐng)域也幾乎是相同的。利用這些廣泛的程序庫,您可以實(shí)現(xiàn)各種類型的Web開發(fā),數(shù)據(jù)庫處理,并發(fā)編程,以及加密等操作。

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

代碼可讀性

在為客戶開發(fā)某個(gè)軟件項(xiàng)目時(shí),您可能會(huì)與上十個(gè)、甚至是數(shù)百個(gè)開發(fā)人員協(xié)同工作。那么在這種情況下,代碼的可讀性就顯得非常重要且值得謹(jǐn)慎對(duì)待了。

許多人肯定認(rèn)為Python會(huì)在此處勝出,但是我卻持有不同的意見。乍一看來,Python確實(shí)具有出色的可讀性,但是它難免有些過猶不及了。在Python中,開發(fā)人員可以用十種不同的方式來表達(dá)某個(gè)相同的事物。而這通常會(huì)導(dǎo)致代碼的冗長(zhǎng),或者會(huì)讓不同代碼接手人員產(chǎn)生不必要的混淆。

作為對(duì)比,Go語言在編程方面有著嚴(yán)格的規(guī)則。它既不允許開發(fā)人員導(dǎo)入不必要的程序庫,又不允許創(chuàng)建各種不必要的變量。這就意味著:我們可以用一種確定的方法去執(zhí)行各項(xiàng)任務(wù),以便大型的項(xiàng)目組能夠更好地理解程序代碼。部分新手開發(fā)人員可能會(huì)對(duì)Go代碼的多功能性望而生畏,但是在實(shí)際用它來進(jìn)行核心編程的時(shí)候,誰又會(huì)真正去關(guān)心它的多功能性呢?盡管Golang的語法對(duì)于初學(xué)者來說并不那么友好,但它也不至于像C或C++那樣“高攀不起”。因此,為了便于閱讀代碼,我時(shí)常會(huì)選擇使用Golang。

綜上所述,Golang在大多數(shù)情況下會(huì)略占上風(fēng)。并且在我看來,作為一種編程語言,它已經(jīng)勝過了Python。當(dāng)然,不可否認(rèn)的是:經(jīng)過多年的發(fā)展,Python已在互聯(lián)網(wǎng)上積累了大量的人氣,并在軟件項(xiàng)目中屢屢出現(xiàn)。不過可喜的是,Go語言也正在此方面迎頭趕上。同時(shí),我歡迎您發(fā)表不同的意見。

原文標(biāo)題:Golang vs. Python: Which One to Choose?,作者:Aryya Paul

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2020-02-07 12:55:29

GolangPython人工智能

2021-01-13 10:40:42

編程語言PLCGraph

2022-05-26 08:01:29

PythonR編程語言

2021-04-27 09:00:00

PythonIDE開發(fā)

2022-08-10 15:59:58

云計(jì)算邊緣計(jì)算

2009-06-28 22:58:00

適合數(shù)據(jù)中心服務(wù)器

2023-12-22 16:16:21

物聯(lián)網(wǎng)協(xié)議物聯(lián)網(wǎng)EnOcean

2010-07-13 16:15:49

XenServer5.6

2024-04-03 08:28:31

GolangPHP語言

2020-05-14 10:35:18

物聯(lián)網(wǎng)標(biāo)準(zhǔn)物聯(lián)網(wǎng)IOT

2019-08-20 11:11:07

PythonJavaC

2023-11-23 11:10:20

WiFi蜂窩網(wǎng)絡(luò)

2013-11-08 14:57:37

2020-07-15 07:00:00

DebianUbuntuLinux Mint

2009-08-13 17:14:55

2022-07-28 13:54:16

RPABPA自動(dòng)化項(xiàng)目

2013-12-18 15:27:21

編程無鎖

2022-08-12 08:00:00

編碼語言開發(fā)工具

2024-10-24 20:48:04

Netty線程Java

2019-10-21 08:00:59

物聯(lián)網(wǎng)架構(gòu)IOT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)