雲端與網路服務的 Go 語言

概覽

Go 協助企業建構並擴展雲端運算系統

隨著應用程式與處理作業轉移至雲端,並發(Concurrency)成為了一個極大的議題。雲端運算系統本質上就是共享與擴展資源。協調對共享資源的存取,是影響雲端中每個應用程式處理流程的問題,因此需要「專為開發高可靠性並發應用程式而設計」的程式語言。

Go 讓公司擴展變得非常容易。這一點至關重要,因為隨著工程團隊的成長,每個服務都可以由不同的單位來管理。

主要優勢

解決開發週期時間與伺服器效能之間的取捨

Go 的誕生正是為了滿足大規模應用程式、微服務與雲端開發在並發上的這些需求。事實上,雲端原生運算基金會(Cloud Native Computing Foundation)中超過 75% 的專案都是使用 Go 編寫的。

Go 透過快速的建構時間(支援反覆運算開發),以及較低的記憶體與 CPU 使用率,有助於減少這類取捨的需求。使用 Go 建構的伺服器能實現即時啟動,並在隨用隨付(pay-as-you-go)與無伺服器(serverless)部署中更具成本效益。

解決現代雲端的挑戰,提供標準且符合慣例的 API

Go 解決了開發人員在現代雲端開發中面臨的許多挑戰,提供了標準且符合慣例的 API,並內建了可利用多核心處理器的並發機制。Go 的低延遲特性與「無須調校(no knob)」的設計,使其在效能與生產力之間取得了完美的平衡——賦予工程團隊選擇的權力與前進的動力。

使用案例

使用 Go 進行雲端運算

Go 在建構服務時的優勢非常突出。其速度與內建的並發支援,造就了快速且高效的服務;而靜態型別、強大的工具鏈以及對簡潔性與可讀性的重視,則有助於建構可靠且易於維護的程式碼。

Go 擁有支援服務開發的強大生態系。標準函式庫包含了 HTTP 伺服器與用戶端、JSON/XML 解析、SQL 資料庫,以及一系列安全/加密功能等常見需求的套件;而 Go 執行時期(runtime)則包含了用於競爭偵測 (race detection)效能基準測試 (benchmarking)/分析、程式碼產生及靜態程式碼分析的工具。

主要的雲端服務供應商 (GCP, AWS, Azure) 均為其服務提供 Go API,且熱門的開放原始碼函式庫提供了 API 工具 (Swagger)、傳輸 (protocol buffers, gRPC)、監控 (OpenCensus)、物件關聯對映 (gORM) 與認證 (JWT) 的支援。開放原始碼社群也提供了多種服務框架,包括 Go KitGo Micro 以及 Gizmo,這些都是快速入門的好選擇。

用於雲端運算的 Go 工具

Docker Docker

Docker 是一個以容器交付軟體的平台即服務(PaaS)。容器將軟體、函式庫與設定檔打包在一起,由 Docker Engine 託管,並在單一作業系統核心上執行(與虛擬機器相比,使用的系統資源更少)。

雲端開發人員使用 Docker 來管理他們的 Go 程式碼並支援多個平台,因為 Docker 支援開發工作流程與部署程序。

Kubernetes Kubernetes

Kubernetes 是一個用 Go 編寫的開放原始碼容器編排系統,用於自動化網頁應用程式的部署。網頁應用程式通常使用(如上所述的)封裝了相依性與配置的容器來建構。Kubernetes 有助於大規模部署與管理這些容器。雲端程式設計師使用 Kubernetes 來快速建構、交付與擴展容器化應用程式——透過 API 控制容器的執行方式,以管理日益增加的複雜性。

客戶 簡介 使用 Go 的專案
Google Google Google Google Cloud 在其整個產品與工具生態系中使用 Go,包括 Kubernetes、gVisor、Knative、Istio 與 Anthos。Go 在 Google Cloud 的所有 API 與執行環境中均獲得全面支援。
Capital One Capital One Capital One Capital One 使用 Go 來驅動其關鍵服務「信用卡優惠 API (Credit Offers API)」。工程團隊也正在使用 Go 建構其無伺服器架構,他們引述了 Go 的速度與簡潔性,並提到「如果沒有 Go,他們不想嘗試無伺服器架構。」
Dropbox Dropbox Dropbox Dropbox 原本是建立在 Python 之上的,但在 2013 年決定將其效能關鍵的後端遷移至 Go。時至今日,該公司的大部分基礎架構都是用 Go 編寫的。

開始使用

用於雲端運算的 Go 書籍

  • Echo

    一個高效能、可擴展且極簡的 Go 網頁框架

  • Flamingo

    一個基於 Go 的快速開源框架,具有簡潔且可擴展的架構

  • Gin

    一個用 Go 編寫,擁有類似 Martini API 的網頁框架。

  • Gorilla

    一個用於 Go 程式語言的網頁工具組。

查看更多
  • net/http

    標準函式庫 HTTP 套件

  • julienschmidt/httprouter

    一個輕量級的高效能 HTTP 請求路由器

  • gorilla/mux

    一個功能強大的 HTTP 路由器與 URL 比對器,用於建構 Go 網頁伺服器 🦍

  • Chi

    一個輕量級、符合 Go 慣例且可組合的路由器,用於建構 Go HTTP 服務。

查看更多
查看更多
  • database/sql

    一個標準函式庫介面,支援 MySQL、Postgres、Oracle、MS SQL、BigQuery 及大多數 SQL 資料庫的驅動程式

  • mongo-driver/mongo

    MongoDB 官方支援的 Go 驅動程式

  • elastic/go-elasticsearch

    一個用於 Go 的 Elasticsearch 用戶端

  • GORM

    一個 Go 的 ORM 函式庫

  • Bleve

    用於 Go 的全文搜尋與索引引擎

  • CockroachDB

    資料庫的演進——專為雲端架構設計,在大規模下提供具備韌性、一致性與分散式的 SQL

查看更多
查看更多
  • gopherjs

    一個從 Go 到 JavaScript 的編譯器,讓開發人員可以使用 Go 編寫前端程式碼,並在所有瀏覽器中執行。

查看更多