過去一段時間,Go 語言中文網推過挺多 Python 相關的公眾號,很多人詫異:為什麼推的都是 Python 的呢?其實主要原因是因為 Python 類的公眾號實在太多了,而且很多粉絲都特別多,我也挺納悶的。不過他們值得我學習,也說明 Go 還有很長的路要走。
為了證明 Go 語言中文網堅持做 Go 語言,推廣 Go、分享 Go,為 Go 的發展做貢獻,這兩天會分享兩篇 Go 和 Python 的對比文章。歡迎指正。
您會在 Python 和 Go 之間選擇哪個?如果您對 Go(Golang)有更深入的了解,那麼您肯定會選它。否則將會選擇Python。那麼我們討論一下。Python 的夥伴們,有 5 個理由可以讓您選擇 Go。讓我們一起閱讀這篇文章。
「 Python非常強大,尤其是 Python 3 具有異步功能,但是 Go 將完全取代它在大型企業中的地位……」
如果您真的理解引號,則可以嘗試使用 Go 程式語言。我認為 Go 是一種非常簡單的程式語言,可以適應任何應用程式環境,甚至比 Javascript 編程還要簡單。這可能就是為什麼 Go 程式語言近年來變得流行的原因。
在本文中,我將比較兩種語言的以下方面。這些方面的參數將幫助您確定哪種語言更適合您的手頭項目。
網站 TreeScale.com 主頁和 API 是基於某些分析工具的 Web 應用程式。這是他們的技術棧:
Repustate 幾乎完全是 Python 商店。他們使用 Django 來實現 API 和網站。因此(當前)使用 Python 來實現阿拉伯情感引擎是合理的,以便保持代碼的一致性。僅用於原型設計和實現,Python 是一個不錯的選擇。它的表達能力非常強大,第三方類庫等也很好。如果您要使用 Web 服務,那麼 Python 是不錯的選擇。但是,當您執行低級計算並嚴重依賴哈希表( Python 中的字典類型)進行比較時,一切都會變慢。我們每秒可以處理大約兩到三個阿拉伯文文檔,但這太慢了。相比之下,他們的英語情感引擎每秒可以處理大約 500 個文檔。
從上面可以看到,基本框架完全基於微服務和邏輯的分離(前端和後端分離),甚至是完全不同的技術來實現。
他們將 API 服務和後端集成到一個項目中的主要原因是它們在許多地方都相似,並且通過多種語言或技術進行編碼,同時有很多重複的代碼。最後,他們需要花費大量時間來個性化 Django 的 API 服務,尤其是在自定義 JSON 響應方面。
我覺得當您開發一些普通的應用程式時,使用 Django 很棒,但是當您需要更高的性能和一些個性化的模塊時,使用 Django 會使它更加複雜。
1、編譯為單個二進位文件
Golang 是一種編譯語言,Googe 的開發人員為此付出了很多努力。它使用靜態連結根據作業系統類型和環境將所有相關的庫文件和模塊實際組合到一個二進位文件中,這也意味著如果要將後端應用程式編譯到 Linux 作業系統和基於 X86 CPU 的應用程式,您只需將已編譯的二進位應用程式下載到伺服器,然後後端應用程式就可以工作,不需要任何相關文件。
2、靜態類型系統
類型系統對於大規模應用非常重要。Python 是一種很棒的有趣的語言,但是有時您會看到一些奇怪的異常,因為當您嘗試將變量用作整數變量時,而實際它是字符串類型。
def some_view (request): user_id = request.POST.get ('id', 0)這樣的代碼將導致 Django 崩潰。
而 Go 會進行編譯,並告訴您這是一個編譯器錯誤,這是它在愚蠢問題上贏得時間的地方。
3、優化(性能)
令人驚訝的是,在大多數應用程式場景中,Go 比 Python(第 2 版或第 3 版)更快。比較的結果可以在基準測試中看到,這當然是不公平的,它取決於應用程式的類型和用戶用例。
就我們而言,Go 擁有自己的多線程模塊和 CPU 可擴展性,因此性能更高。每當我們需要執行一些內部請求時,我們都可以使用 Goroutine 分別執行它們,這比 Python 中的線程要節省十倍的資源。藉助這些內置的語言功能,我們可以節省大量資源(內存和 CPU)。
4、Go 不再需要 Web 框架
對於程式語言來說,這是一件很酷的事情。Go 語言的創建者和社區擁有核心語言支持的許多內置工具,在大多數情況下,您不再需要任何第三方庫。例如,它具有內置的 http,json 和 html 模板。您甚至可以構建非常複雜的 API 服務,而不必擔心在 Github 上找到第三方庫。
當然,Go 也有許多用於構建 Web 項目的庫和框架,但是我建議您不要使用第三方庫來構建 Web 項目或 API 服務,因為在大多數情況下,使用標準庫包將使您的生活更輕鬆。
5、更好的 IDE 支持和調試
當您嘗試更改程式語言時,IDE 支持是最重要的考慮因素之一。友好的 IDE 可以平均節省 80% 的編程時間。Go Plugin for JetBrains IDEA,還提供其他支持,例如(Webstorm,PHPStorm 等)。該插件提供項目開發中所需的任何服務。強大的 JetBrains IDEA 可以使您的開發更加強大,更好用的是 Goland。
Mozilla 正在內部將其龐大的基礎日誌記錄架構轉換為 Go,部分原因是強大的 goroutines 。Go語言是由 Google 的人員設計的,在設計之初,對並發的支持才是重中之重,而不是像其他各種 Python 解決方案一樣在其後添加。因此,我們開始從 Python 切換到 Go。
儘管我們的 Go 代碼產品尚未正式發布,但結果令人鼓舞。現在,我們每秒可以處理一千個文檔,使用更少的內存,並且不需要調試在 Python 中遇到的問題:醜陋的多進程/gevent/「為什麼 Control-C 無法殺死進程」。
任何對程式語言的工作方式(解釋與編譯,動態與靜態)了解甚少的人都會說:「切,當然 Go 會更快」。是的,我們還可以用 Java 重寫所有內容,並且可以看到類似且更快的改進,但這不是 Go 語言獲勝的原因。您在 Go 中編寫的代碼似乎是正確的。我不知道發生了什麼,但是一旦代碼被編譯(快速的編譯速度),您就會覺得代碼可以正常工作(不僅可以正確運行,而且在邏輯上正確)。我知道這聽起來不太可靠,但確實如此。就冗餘(或非冗餘)而言,這與 Python 非常相似。它以函數為首要目標,因此函數式編程將易於理解。當然,Go 線程和通道使您的工作變得更輕鬆,可以從靜態類型中獲得很大的性能提升,並且可以更好地控制內存分配,但是不必為語言表現力付出太多成本。
根據我們的代碼統計,用 Go 重寫項目後,我們減少了 64% 的代碼。
您不需要調試不存在的代碼。代碼越少,錯誤越少!
Go 為我們提供了極大的靈活性。一種語言可以在所有用戶方案中使用,並且在所有用戶方案中都能很好地工作。在後端和 API 服務中,我們獲得了 30% 的性能優化。現在,我可以實時處理日誌,轉換為資料庫,並通過 WebSocket 處理一項或多項服務!這是 Go 語言功能提供的非常強大的功能。
【編輯推薦】
【責任編輯:
華軒TEL:(010)68476606】