我們將項目語言從Python轉向Go的5個原因
前言
Python是一個非常受歡迎的語言。但在企業世界中,能打的go并沒有給人任何生存的機會。
如果你明白了這句話的意思,那么你可能已經嘗試過或者看過Go編程語言。我認為它是最簡單的編程語言,可以適用于任何類型的應用程序開發。
是的!你沒看錯,對我來說go比JavaScript還好學。我認為這是go語言在幾年之內變得如此流行的主要原因。
下面我們對比一下Python和Go。
那么我們在使用Go之前有什么
這是我們的Python技術堆棧:
- Dashboard前端的response .js
- Django Python用于儀表板后端+身份驗證服務
- 用于API服務的Node.js
- PostgreSQL用于數據庫,Cassandra用于日志記錄
- 自定義書面集裝箱注冊與Rust語言
正如您所看到的,整個基礎設施是完全基于微服務的,大部分邏輯完全分離,甚至使用不同的技術。
這就是我們開始考慮將API服務和后端合并到單個項目中的主要原因,因為它們有很多相似之處,但是代碼庫在多種編程語言和技術上是重復的。但是我們需要做很多工作來定制Django的API服務,特別是定制JSON響應。
為什么使用Go
正如之前所說,Go語言是我所見過和使用過的最簡單的語言。但這只是吸引我的第一點。
這里是我們選擇Go而不是Python Django的5個主要原因
1. 它編譯成單個二進制文件
Golang是作為一種編譯語言構建的,谷歌開發人員在這方面做得很好。使用靜態鏈接,實際上是將所有依賴庫和模塊結合到一個基于操作系統類型和體系結構的二進制文件中。這意味著如果你在你的筆記本電腦上用Linux X86 CPU編譯你的后端應用程序,你只需要把編譯好的二進制文件上傳到服務器上,它就會工作,而不需要在那里安裝任何依賴項!
2. 靜態類型系統
類型系統對于大規模應用程序非常重要。Python是一門偉大而有趣的語言,但有時你會遇到不尋常的異常,因為你試圖把變量當作整數來使用,結果卻發現它是一個字符串。
- # Django will crash process because of this
- def some_view(request):
- user_id = request.POST.get('id', 0)
- # If this post request has "id" parameter then
- # user_id would be a string,
- # but you really thinking it is integer
- User.objects.get(id=user_id)
Go會在編譯時作為編譯器錯誤讓您知道這個問題。這是你贏得時間的地方。
3. 性能!
這可能令人驚訝,但在大多數應用程序中,Go比Python(2和3)要快。
在我們的案例中,由于Go的并發模型和CPU可伸縮性,他的性能更好。每當我們需要處理一些內部請求時,我們就用單獨的Goroutine來處理它,它在資源上比Python線程便宜10倍。因此,我們節省了大量的資源(內存、CPU),因為語言的內置特性。
4. 你不需要網絡框架
這是編程語言最棒的地方。Go語言的創造者和社區已經構建了許多由語言核心支持的工具,在大多數情況下,你真的不需要任何第三方庫。例如,它有http、json、html模板是用本地語言構建的,你可以構建非常復雜的API服務,甚至不需要在Github上查找庫!
但是,當然有很多為Go構建的庫和框架,以及使用Go構建web應用程序,但是我建議在不使用任何第三方庫的情況下構建web應用程序或API服務,因為在大多數情況下,它們并不比使用本地包更容易。
5. 偉大的IDE支持和調試
當您試圖切換編程語言時,IDE支持是最重要的事情之一。舒適的IDE平均可以節省80%的編碼時間。我發現了JetBrains IDEA的Go插件,它也支持(Webstorm, PHPStorm等)。這個插件提供了項目開發所需的一切,利用JetBrains的強大功能,您可以真正促進開發。
根據我們的代碼庫統計,在重寫所有要運行的項目之后,我們得到的代碼比以前少了64%。
結論
Go為我們提供了巨大的靈活性,為所有的用例提供了單一的語言,并且對所有的用例都非常有效。我們的后端和API服務的性能提高了30%。現在我們可以實時處理日志記錄,將其傳輸到數據庫,并使用Websocket從單個或多個服務進行流處理!這是Go語言特性的一個很好的結果。
英文原文:
https://medium.com/hackernoon/5-reasons-why-we-switched-from-python-to-go-4414d5f42690