五大理由從 Python 轉到 Go 語言
“ Python 是非常強大的,特別是 Python3 有了異步功能,但是 GO 將完全取代它在大企業中的存在…”
如果你真正理解了引號中的話,你可能會去嘗試 Go 編程語言。我認為 Go 是很簡單的編程語言,并且適應任何的應用環境,甚至比 Javascript 編程還要簡單,這可能是 GO 編程語言能在這幾年很快流行起來的原因吧。
我們在使用 Go 語言編程之前有什么呢?
網站 TreeScale.com 主頁和 API 都是基于一些分析工具的網絡應用。下面是我們的技術棧:
-
React.js 主頁 前端
-
Django Python 主頁 后端和認證服務
-
Node.js API 服務
-
PostgreSQL 數據庫 、Cassandra 日志系統
-
自定義容器注冊表是使用 Rust 語言
從上面你可以看到基礎的框架是完全的基于微服務和邏輯分離的(前后端分離),甚至說是完全不同的技術來實現的。
為什么我們開始整合 API 服務和后端到單個項目中,主要的原因是他們有很多地方是相似的而且通過多種語言或者技術編程,代碼存在很多重復的。最終我們需要花費很多時間在個性化的 Django's API 服務,特別是在定制 JSON 的響應。
一個月之后我們用 Django 建立的 API 服務,我感覺當你開發一些普通的應用使用 Django 是非常棒的,但是當你需要更高的性能和一些個性化的模塊的東西的使用 Django 是會越來越復雜的。
為什么選擇 Go 語言編程?
1 編譯成單一的二進制
Golang 是編譯型語言并且 Googe 的開發者花了很大的功夫在上面。它使用靜態鏈接實際上是基于操作系統類型和環境組合所有的依賴庫文件和模塊到一個單一的二進制文件中,這也意味著如果你想要編譯你的后端應用到你的 Linux 操作系統和 X86 架構的 CPU 中,你只要下載編譯好的二進制應用到服務器,然后可以后端應用可以工作了,這是不需要任何的依賴文件的。
2 靜態類型系統
對于大規模應用來說類型系統是非常重要的。Python 是很棒的并且有趣的語言但是有些時候你會看到一些不尋常的異常因為當你嘗試將變量作為一個整型變量的時候結果它是一個字符串類型.
# Django will crash process because of this def some_view(request): user_id = request.POST.get('id', 0)
Go 在編譯的時候告訴你這是一個編譯器錯誤,這就是在愚蠢的問題上贏得時間的地方。
3 優化
令人驚訝的是,在大多數的應用場景中,Go 語言比 Python(版本2或3)更快。 Benchmarking Game 中可以看到對比的結果,當然這是不公平的,這依賴于應用類型和用戶用例。
對于我們的案例,Go 語言由于自己的多線程模塊和 CPU 可伸縮性獲得了較好的性能。無論什么時候我們需要執行一些內部的請求,我們可以使用 Goroutine 來分別執行,這個比 Python 中的 Threads 在資源開銷上要少上十多倍。由于這些內置的語言特性,我們可以節省大量的資源(內存和 CPU )。
4 Go 不再需要 Web 框架
對于編程語言這是一件十分酷的事情。Go 語言的創造者和社區內置了很多原生的被核心語言支持的工具,在大多數情況下你都不再需要任何第三方類庫。比如它有內置的 http、json、html 模板,你甚至可以不用費心去 Github 上尋找第三方類庫就可以構建十分復雜的 API 服務。
當然,Go 也有很多類庫和框架用來構建 web 項目,但是我會建議你不使用第三方類庫來構建你的 web 項目或者 API 服務,因為在大多數情況下使用原生包會使你的生活更加輕松。
5 更好的 IDE 支持和調試
IDE 支持是當你嘗試更改編程語言時最重要的考慮因素之一。友好的 IDE 平均可以節省你80%的編程時間。 Go Plugin For JetBrains IDEA ,同樣提供了其他支持,比如 (Webstorm、PHPStorm 等等…)。這個插件提供了任何你在項目開發中需要的服務,強大的 JetBrains IDEA ,可以讓你的開發如虎添翼。
基于我們的代碼統計,在用 Go 語言重寫項目后我們少寫了64%的代碼。
你不需要調試不存在的代碼。代碼越少,錯誤越少!
結論
Go 為我們提供了超強的靈活性,一種語言可以適用于所有的用戶場景,而且在所有的用戶場景都可以工作的很好。在我們的 Backend 和 API 服務中,我們得到了30%的性能優化。而且現在我可以實時處理日志,轉換到數據庫中,并且通過 Websocket 處理一個或多個服務!這就是 Go 語言特性所提供的的非常強大的功能。
來自:https://www.oschina.net/translate/5-reasons-why-we-switched-from-python-to-go