新聞中心
入門必備,高性價比輕量、CVM、GPU云服務器,每日限量開搶
哪個更好,Python 還是 Go?你今天應該學習哪種語言,為什么?兩者在性能、易學習性、可擴展性和快速原型設計方面如何比較?讓我們在 Python 和 Go 的這個友好且易于訪問的概述中找出答案,該概述由For the Love of Go 系列叢書的作者撰寫。

Python 和 Go 都很棒
首先,真的有必要說,Go 和 Python 都是絕對優(yōu)秀的編程語言。它們設計精良,功能強大,現(xiàn)代,相對易學,是幾乎所有應用的理想選擇。兩者都擁有強大的社區(qū),廣泛的應用,蓬勃發(fā)展的生態(tài)系統(tǒng)以及高商業(yè)價值。
無論你最喜歡哪一個,都是最值得學習的。你可能會想,討論結束,但讓我們再說一點。
讀到諸如 "為什么 Python 很爛",或者 "為什么我們從 Go 轉到 Python "之類的博文是很常見的。不客氣地說,這些文章對于理解可能影響你選擇的 Python 和 Go 的特性并不特別有價值,而且它們通常想論證一種語言更好。
但這真的毫無意義。對什么更好?任何編程語言都自然而然地代表了一系列的權衡:比如說,速度與安全的關系,或者是易學與正確性的關系。不同的語言會做出不同的權衡。你可以有把握地假設,任何廣泛使用的語言,如 Go 或 Python,平均來說,和其他語言一樣好......但也許在不同的事情上。
因此,讓我們拋開這個錯誤的兩難選擇,即要么選擇 Go,要么選擇 Python。我們可以學習和使用這兩種語言;這兩種語言在不同的領域都很出色,而且從職業(yè)的角度來看,這兩種語言都是非常有價值的技能。然而,假設你有有限的學習和練習時間,了解你想從事的開發(fā)領域偏愛哪種語言會有幫助。
因此,讓我們看看編程的一些不同領域,看看哪種語言更適合每個領域。
易學性
如果你是編程新手,你可能會從你的編程語言中尋找不同的東西,比如說,想為深空探測器寫操作系統(tǒng)的人。例如,你可能想要一種簡潔的語言,沒有大量的語法需要學習,或者一種靈活的語言,讓你以任何感覺最自然的方式表達自己。
Go 是一門刻意縮小的語言;例如,它沒有很多不同的方式來做同一件事,而且語言中也沒有很多三方工具來涵蓋你可能想要做的每一件事。相比之下,Python 有很多功能:類、lambda 、元組、迭代器、生成器,以及更多。
然而,Python 的語法感覺相當自然;它看起來像這樣。
for path in paths:
if path == '-':
text = sys.stdin.read()
else:
fp = codecs.open(path, 'r', opts.encoding)
text = fp.read()
fp.close()Go 很簡單,但簡單并不等同于容易。如果你是新手,可能很難弄清楚某段 Go 代碼在做什么。
func (forceApi *ForceApi) getApiSObjects() error {
uri := forceApi.apiResources[sObjectsKey]
list := &SObjectApiResponse{}
err := forceApi.Get(uri, nil, list)
if err != nil {
return err
}另一方面,雖然一開始可能更有挑戰(zhàn)性,但你很快就會達到熟悉 Go 中一切的程度。要達到這個階段,Python 需要更長的時間,因為有更多的東西需要學習。
然而,如果你正在邁出編程的第一步,使用 Python 可能會是一個更容易和更愉快的經歷。
高性能
如果你是編程新手,你可能會驚訝地發(fā)現(xiàn),對于大多數(shù)程序來說,性能幾乎不重要。一般來說,可讀性和可維護性要比原始速度重要得多。但是,當性能確實重要時,在游戲、數(shù)據(jù)庫或大規(guī)模網絡服務等應用中,它真的很重要。
Go 是一種編譯語言,這意味著 Go 的源代碼會被翻譯成機器語言,供你在特定的處理器上運行:ARM 芯片、X86_64,或者其他。
這使得 Go 程序總體上比 Python 中的同等程序快得多。Python 是一種解釋語言,這意味著它不直接在 CPU 上執(zhí)行。相反,另一個程序,即解釋器,讀取 Python 源代碼,并將其即時翻譯成機器指令。
需要注意的是,對于你所寫的 99% 的程序來說,性能遠沒有簡單性和可讀性重要,如果你碰巧需要寫一些執(zhí)行速度非??斓某绦?,Go 將是你的第一選擇。
數(shù)據(jù)科學
科學家,包括數(shù)據(jù)科學家、機器學習開發(fā)者,以及需要做復雜數(shù)值和統(tǒng)計分析的人,都喜歡 Python。它已經存在了很長時間,并且為科學計算建立了一個偉大的生態(tài)系統(tǒng):數(shù)學、統(tǒng)計、人工智能、模擬、圖像處理、分布式處理等等。這些庫和社區(qū)非常成熟,并提供了大量的資源。
并不是說你不能用 Go 做這些事情,而是人們在 Python 中做這些事情的時間更長,它或多或少擁有這個空間。如果你在做科學和工程應用,你幾乎肯定會用 Python 做。
高擴展
當我們談論 "擴展性"時,我們通常意味著很多事情發(fā)生得非??欤好棵霐?shù)百萬次的交易,成千上萬的服務器,數(shù)千兆字節(jié)的數(shù)據(jù)。這給程序員帶來了一些挑戰(zhàn):他們需要他們的程序快速、小巧、易于部署和操作,而且最好對并發(fā)有很好的支持。
這些都是 Go 非常強大的領域。正如我們所看到的,Go 程序是經過編譯的,所以它們的執(zhí)行速度自然很快,而且它們可以作為一個小的二進制文件來部署。相比之下,Python 程序是以源代碼的形式部署的,而且它們還需要 Python 解釋器、庫等等。即使使用容器,用 Go 來大規(guī)模部署和運行應用程序也要容易得多。
Go 從一開始也是為并發(fā)而設計的。它支持超輕量級的線程,稱為 goroutines,一個程序可以同時運行數(shù)百萬個 goroutines 而不會產生問題。雖然 Python 支持并發(fā)進程和線程,但使用起來比 Go 要復雜一些,而且性能也沒有那么好。
對于大規(guī)模、低延遲的應用,尤其是涉及大量并發(fā)的應用,Go 是你應該首先關注的語言。
快速原型設計
在軟件開發(fā)中很常見的是,我們事先并沒有對程序的所有詳細要求。相反,我們只想讓一些東西運行起來,證明這個概念,并給我們一個簡單的原型,我們可以向用戶展示,這樣我們就可以得到反饋。
Python 是一種優(yōu)秀的快速原型語言;我們可以把我們的想法以一種幾乎看起來像英語的形式快速寫下來,而且所產生的程序可能會運行,或多或少。Python 的動態(tài)類型是非常寬容的;它意味著你不需要確切地知道什么是什么,就可以處理它。
相比之下,Go 是相當嚴格的。它是靜態(tài)類型的,這意味著編譯器堅持事先驗證你傳遞給一個函數(shù)的每一個值,比如說,正是它應該有的類型。這可能會使編程經驗感覺有點像在做大量的文書工作,只是為了讓一個簡單的概念證明運行。
對于超快速的原型開發(fā)、實驗和用快速腳本解決一次性問題,Python 是理想的選擇。
總結
我希望這篇文章能讓你相信 Python 和 Go 都值得你認真考慮。如果可能的話,你應該爭取在這兩種語言中至少獲得一定程度的經驗,因為這對你在任何技術職業(yè)中都是非常有用的,甚至如果你把編程作為一種愛好的話。
你現(xiàn)在知道的足夠多了,可以拒絕所有旨在說服你相信 Go 或 Python 在某種絕對方式上比另一個更好的點擊率文章,或者至少用非常挑剔的眼光來閱讀它們,并理解它們在很大程度上只是表達作者的個人偏好。
這沒關系:編程是一項非常主觀和個人的活動,你用你最喜歡的語言比用一個計算機科學家小組認為理論上優(yōu)越的語言更有成效。另外,你也不會覺得有必要寫博客文章侮辱那些喜歡不同語言的人;你明白他們只是對不同事情的優(yōu)先考慮。
因此,你同時嘗試 Python 和 Go,看看你更喜歡用哪種語言編程,真的很有意義,不是嗎?當你寫了一堆玩具程序或編碼挑戰(zhàn),也許每種語言都有一個非簡單的程序,你就能更好地決定你想優(yōu)先學習哪種語言了。
最后一點:好的程序員就是一個好的程序員,無論他們現(xiàn)在用什么語言工作。作為一名軟件開發(fā)人員,你所學到的大多數(shù)技能都可以很好地轉化為其他語言和技術棧,所以今天選擇學習什么并不重要。
忽略那些炒作的言論,跳過那些過度炒作的博客文章,讓你自己決定:當涉及到 Python 和 Go 之間的選擇時,只有你的意愿是重要的。
文章題目:GovsPython,我該選哪一門語言?
URL鏈接:http://m.fisionsoft.com.cn/article/ccojchd.html


咨詢
建站咨詢
