Google 的使命是“整合全球資訊,供大眾使用”。負責整合這些資訊的一支團隊就是 Google 的核心資料解決方案團隊。該團隊負責維護全球網頁索引服務等工作。這些網頁索引服務透過保持搜尋結果的最新和全面來支援 Google 搜尋等產品,而它們就是用 Go 編寫的。
2015 年,為了跟上 Google 的發展規模,我們的團隊需要將用 C++ 編寫的單個單體二進位制檔案重寫為微服務架構中的多個元件。我們決定用 Go 重寫許多索引服務,現在我們已將其用於支撐我們架構的大部分。
“
Go 內建的併發性非常適合,因為團隊中的工程師被鼓勵使用併發和並行演算法。
在選擇一門語言時,我們的團隊發現 Go 的多項特性使其特別適用。例如,Go 內建的併發性非常適合,因為團隊中的工程師被鼓勵使用併發和並行演算法。工程師們還發現“Go 程式碼更自然”,使他們能夠花時間專注於業務邏輯和分析,而不是管理記憶體和最佳化效能。
用 Go 編寫程式碼要簡單得多,因為它有助於減輕開發過程中的認知負擔。例如,在使用 C++ 時,複雜的 IDE 可能會“顯示原始碼沒有編譯錯誤,但實際上卻有”,而 MinJae Hwang,核心資料解決方案團隊的軟體工程師說:“在 Go 中,當 IDE 說程式碼沒有編譯錯誤時,程式碼總是能夠編譯透過”。透過消除開發過程中的小摩擦點,例如縮短修復編譯錯誤的週期,幫助我們的團隊在最初重寫時能夠更快地釋出,並有助於將我們的維護成本保持在較低水平。
Hwang 還分享道:“當我在 C++ 中想要使用更多包時,我必須編寫像標頭檔案這樣的東西。當我用 Go 編寫時,**內建工具讓我能夠更輕鬆地使用包。我的開發速度快了很多。**”
憑藉簡單的語言語法和 Go 工具的支援,我們團隊的幾名成員發現用 Go 編寫程式碼更容易了。我們還發現 Go 在靜態型別檢查方面做得非常好,並且像 godoc 命令這樣的某些 Go 基礎知識,幫助團隊圍繞編寫文件建立了更有紀律的文化。
“
……Google 的網頁索引在一年內就重新設計了。更令人印象深刻的是,團隊中的大多數開發人員在學習 Go 的同時也在用 Go 進行重寫。
負責一個被全世界如此廣泛使用的產品並非易事,我們團隊使用 Go 的決定也並非易事,但這樣做幫助我們更快地行動。因此,Google 的網頁索引在一年內就重新設計了。更令人印象深刻的是,團隊中的大多數開發人員在學習 Go 的同時也在用 Go 進行重寫。
除了核心資料解決方案團隊,Google 的其他工程團隊也已在開發過程中採用了 Go。閱讀關於 Chrome 和 Firebase Hosting 團隊如何使用 Go 來構建快速、可靠、高效且可擴充套件的軟體。
關於核心資料
Google 是一家技術公司,其使命是整合全球資訊,供大眾使用。
在本案例研究中,Google 的核心資料解決方案團隊分享了他們與 Go 的旅程,包括他們用 Go 重寫網頁索引服務的決定,利用 Go 內建的併發性,以及觀察 Go 如何幫助改進開發過程。