Go 很好,為什麼我們不使用它? 【已翻譯100%】

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

任何在 Zapier 或者聽過我周五快速演講的人都可以證明,我認為 Go 是一個很棒的程式設計語言。在這篇文章中,我將分享一下為什麼我認為它很棒,使用它的一些缺點,以及為什麼它還不是我們 Zapier 堆棧中的一部分。

Go 是 Google 開發的程式設計語言,旨在協助大型Team Dev成功構建和維護高效能軟體項目。 它於 2009 年起開源,並於 2012 年發布 Go 1.0。此後,許多組織,包括像 Docker 和 Hashicorp 這樣的突出的公司已經開始在項目中使用該語言取得圓滿成功。

Tocy 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

My First Go at Go

我寫第一行 Go 程式大概是在 4 年前。一開始,我不得“要領”。這個語言似乎很有趣,程式員們都在吹噓 Go 的好,但我對這些好處並沒有什麼概念。直到我把一個 Python 的真實項目移植到 Go,真實世界的需求才讓我欣賞到 Go 的美妙。

我移植的項目是使用 Redis 實現的一個非常小的 REST API。它只是一個簡單的緩衝系統,把“不活動的”資料移動到磁碟上,而把“活動的”資料保留在 Redis 中。我需要一個簡單的方法來分發這個 API 並配置 Redis 伺服器,使其不會消耗大量的記憶體,並保持快速。使用 Go 後,發現它的 Spoiler Alert 非常適合這樣的需求。

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

為什麼 Go 是偉大的?

我認為 Go 是偉大的程式設計語言是很多原因。要是現實世界需要,我能夠在幾天內對一個生產系統進行原型設計、測試和部署,而且在每秒能處理比原來多 5 倍請求的情況下,CPU 和記憶體的開銷還都很小。

這是因為 GO 很簡單,只有一個非常小(但是很全)的標準庫。我能夠在幾個小時內掌握絕大部分語言概念,內嵌包,和常用語句。

無若 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

除此之外,Go 還有一些其它東西:

  • 靜態類型

  • 編譯

  • 單獨的二進位發布

  • 記憶體回收

  • 內建並發和原語

  • 可以串連到流行的 C 庫

  • 豐富的文檔

  • 擁有一個充滿活力並持續成長的社區

Zapier 一開始是一個 Python 商店。當上面所列的內容只有部分能在 Python 中實現的時候,實現了整個列表的 Go 顯得非常吸引人。我們每小時要處理數以千計的 API 呼叫,效能對於我們來說非常重要。那麼為什麼不換用 Go 呢?

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

為什麼 Go 並不太好

沒有完美的程式設計語言;一切都需要權衡。Go 在編譯速度和應用程式效能上很優秀,但這是以程式員的生產效率作為代價的。

在權衡的過程中,最有爭議的是 Go 提供了靜態類型系統,但卻沒有泛型。這就是說,容器類資料結構除列表和雜湊表之外,不能擺脫對未知類型指標( interface{} 類型)的類型轉換。

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

Go 還有一些不利於編程的東西:

  • 使用第三方代碼會讓依賴管理變得困難。

  • 類型系統很簡單,但與經典的物件導向和繼承模型有很大不同。它非常像 C。結構 + 介面。沒有類。沒有繼承。

  • 沒有規範的異常或 try/catch。這可能被認為是一種正面的架構,但 Go 經常讓開發人員們跌進其 panic(嚴重錯誤)/recover(恢複) 系統。

  • 有些人認識記憶體回收並適不用於像 Go 這樣的系統程式設計語言。我是喜歡記憶體回收的那類人。

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

Go! 用在哪裡比較好?

Go 非常適合系統編程。它被吹捧為中級語言,介於像 C 這樣的低級語言和像 Python 這樣的進階語言之間。這裡列了一些 Go 適合構建的應用類型:

  • 命令列應用

  • 網路服務

  • Daemons(守護進程)

  • 資料庫

但是,甚至有人用它做這些事情:

  • 嵌入式開發

  • 輕量級的微服務

  • 基礎設施

Go 足夠靈活可以解決大多數問題,甚至有時候會比其它語言做得更好。這裡有一個使用 Go 的公司列表,讓人印象深刻,它包括 Docker、Cloudflare、Dropbox、Intel、Hashicorp,當然,還有 Google。

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

然而… 為什麼 Zapier 仍然不使用它?

Zapier 是構建於 Python 和 Django 之上龐大的單體應用。它有大量使用 Python 完成的關鍵點,很難在在服務啟動並執行時候無縫切換到其它程式設計語言,雖然這並不是不可能!

我們在非常(非常!)早的階段把整個應用拆分成微服務架構。這些服務是按需執行。然而,一旦我們發現某個系統達到臨界狀態需要高效能重寫的時候,我認為 Go 是一個選擇。我們會遵循一個流程:

Viyi 翻譯於 3天前 0人頂 頂  翻譯得不錯哦!
  1. 衡量當前系統並確定瓶頸。

  2. 針對這個瓶頸制定 Go 的解決方案。

  3. 在產品中把這個解決方案作為 canary service 進行衡量。

  4. 啟動所有事情

  5. (廢除並)替換

採用某種程式設計語言是個困難的決定,Go 並不是我們唯一考慮的語言。列表中還有別的一些語言,同樣存在著優點/缺點:

  • Elixir (在 Erlang VM 中)

  • Rust

  • Python 3 (我知道很瘋狂!)

  • PyPy

  • Cython

Viyi 翻譯於 3天前 0人頂 頂  翻譯得不錯哦!

綜上所述:Go 是個非常棒的程式設計語言,我們可以用它來構建高效能系統。在像大多數語言那樣進行權衡的時候,重點考慮的是穩定和便於使用。Go 學起來很容易,多數程式員在使用數周后都能使用它高效地編程。

也許有一天你會讀到另一篇文章,提到我們使用 Go 開發 ZYX 替代了 XYZ。如果你願意成為團隊的一員,考慮可能使用的新語言並改進我們現有的應用的話,來看看我們的職位。

Viyi 翻譯於 3天前 1人頂 頂  翻譯得不錯哦!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.