天天看點

五大理由從Python轉到Go語言

“ python 是非常強大的,特别是 python3 有了異步功能,但是 go 将完全取代它在大企業中的存在…”

如果你真正了解了引号中的話,你可能會去嘗試 go 程式設計語言。我認為 go 是很簡單的程式設計語言,并且适應任何的應用環境,甚至比 javascript 程式設計還要簡單,這可能是 go 程式設計語言能在這幾年很快流行起來的原因吧。

五大理由從Python轉到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 語言特性所提供的的非常強大的功能。

作者:佚名

來源:51cto