--- title: "Google I/O 2025: Go 語言的新進展與未來展望" description: "本文根據 Google I/O 2025 中關於 Go 語言的演講整理,介紹 Go 語言的最新特性和未來發展方向" tags: Go, Google-IO, 程式語言, WebAssembly, 雲端運算 image: https://go.dev/blog/go-brand/Go-Logo/PNG/Go-Logo_Aqua.png --- # Google I/O 2025: Go 語言的新進展與未來展望 {%preview https://youtu.be/kj80m-umOxs?si=9xJkwRi7HVOvsWYZ %} *本文根據 Google I/O 2025 中關於 Go 語言的演講整理而成,由 Go 團隊的產品負責人 Cameron 和開發者關係負責人 Mark 共同介紹* [TOC] ## 前言 在 Google I/O 2025 大會上,Go 團隊分享了這門程式語言的最新發展、主要更新和未來願景。作為一個由 Google 支持的開源程式語言,Go 自誕生以來已有超過 15 年的歷史,並持續在雲端計算、網路服務和近期的 AI 領域發揮著重要作用。本文將帶您了解 Go 的核心理念、最新特性以及未來發展方向。 ## Go 語言的核心理念 Go 語言誕生於 Google 內部面臨大規模關鍵系統建設和維護的挑戰。當時的開發團隊必須在動態解釋型語言的生產力和靜態編譯型語言的生產準備度之間做出選擇,而 Go 的出現就是為了同時滿足這兩方面的需求。 Go 的核心理念建立在三個基本原則上: 1. **生產力優先**:Go 簡單易學、易於維護、可讀性高,並且能夠良好地適應團隊、工作負載和用例的擴展需求。 2. **完整的開發者體驗**:Go 不僅僅是一門語言,更是從 IDE 到生產環境的完整解決方案,提供了軟體開發生命週期中的各個觸點,並且都具備合理的自我調整默認值。 3. **生產就緒**:Go 是可靠、高效、穩定和安全的,使其適用於從簡單應用到企業系統和關鍵基礎設施的各種場景。 這些年來,Go 已成為現代雲端和網路的核心。許多世界知名的雲端技術如 Kubernetes、Docker、Terraform 等都是用 Go 編寫的。從個人開發者到初創公司再到大型企業,都因為 Go 專為雲端設計的特性而採用它。Go 的架構和庫讓開發者能夠更快、更輕鬆地實現雲端的優勢。 據行業調查顯示,Go 是少數增長速度超過開發者人口本身的程式語言之一(另一個是 Rust)。Cloudflare 還報告稱,Go 是驅動網路 API 調用的第一語言。 ## Go 1.23 和 1.24 的新特性 ### 迭代器(Iterators) 在 Go 1.23 中,Go 團隊引入了迭代器,通過 `seek` 和 `seek2` 類型實現。這不僅僅是標準庫中的一種新類型,更是一種優雅的方式來簡化循環,使用熟悉的 `for range` 表達式並將迭代機制與循環體分離。 在引入迭代器之前,循環處理數據有幾種不同的方式: - 有些方法會返回包含所有結果的切片,這對大型集合來說效率不高 - 另一種方式是創建自己的迭代器對象,但這會導致代碼複雜度增加,特別是在流程控制和錯誤處理方面 使用迭代器,開發者可以利用熟悉的 `for range` 語法來執行循環,同時將複雜的流程控制保持在迭代器內部。這讓循環體能夠專注於處理文件或錯誤,而不必擔心流程控制。截至 Go 1.24,標準庫中的 `strings`、`slices` 和 `maps` 包都包含了各種迭代器。 ### Go 語言伺服器(Go, Please) 隨著迭代器等新概念的引入,Go 的垂直集成工具能夠幫助開發者保持代碼庫與最新模式和習慣保持同步。Go 的語言伺服器 "Go, Please" 可以與您的 IDE 集成,無論是通過大多數 IDE 中發現的語言伺服器支持,還是通過像 VS Code Go 擴展這樣的插件。 "Go, Please" 不僅提供類型檢查、函數簽名和引用等常見功能,還能完成更多工作。它能夠幫助開發者在編寫複雜代碼(如迭代器定義)時避免錯誤,並且包含一套現代化工具,可以建議將舊式模式轉換為最新的語言特性或標準庫功能。 ### JSON 解析器改進 Go 1.24 對 JSON 解析器進行了重要更新,引入了 "omit zero" 選項。這個新功能解決了處理 Go 的零值(如空結構和未初始化的時間對象)時常見的錯誤和令人困惑的行為。這些改進讓開發者對 JSON 序列化有了更多控制,避免了可能的錯誤和混淆來源。 ### Go 工具鏈管理 從 Go 1.23 開始,開發者可以使用 `go get` 來管理 Go 工具鏈,就像管理任何其他依賴項一樣。Go 會根據需要下載更新的工具鏈,使團隊能夠使用最新功能,而無需手動更新工具鏈。此功能也適用於依賴項:如果依賴的代碼需要使用 Go 1.24,Go 將自動更新模塊的 Go 指令以要求 1.24 並獲取 1.24 運行時。 ## 生產力與生產就緒的結合 ### WebAssembly 支持改進 在 Go 1.24 中,團隊大幅改進了 Go 對 WebAssembly (WASM) 的支持。WebAssembly 是一種二進制指令格式和沙箱運行時環境,為雲端環境開啟了許多新的有趣用例。 Go 在 1.11 版首次通過 JS WASM 接口支持 WASM,這允許開發者針對網頁瞄準 JavaScript 主機。隨著 WASM 的發展,Go 也在進化。Go 2.1 引入了對 WebAssembly 系統接口 (WASI) 預覽版 1 的支持,提供了類 POSIX 的接口來與系統資源交互。 在 Go 1.24 中,團隊擴展了 Go 的 WASM 功能,主要有兩方面: 1. Go 1.24 允許通過 `go:wasmexport` 編譯指令將 Go 函數導出到 WASM 主機 2. Go 1.24 增加了對構建 WASI 反應器(reactors)的支持,可讓模塊在執行完成後保持初始化狀態 這些功能對長時間運行的插件或擴展非常有用,初始化一次後可以持續運行並響應調用,包括維護狀態。 ### 安全性增強 Go 在安全功能方面一直處於領先地位。在 Go 1.13 中,引入了模塊代理和校驗和數據庫,它們緩存並記錄 Go 生態系統中所有依賴項的哈希值,保護開發者免受中間人攻擊和其他依賴項的篡改。 Go 1.18 引入了內置的模糊測試(fuzz testing),成為第一個在其標準工具鏈中內置並集成本地模糊測試的主要程式語言。模糊測試是一種自動化測試形式,它智能地操作程序的輸入以發現錯誤,尤其是安全漏洞。 2022 年,Go 引入了端到端漏洞管理系統,該系統從 IDE 到運行時的任何地方都會顯示依賴項中的已知漏洞。通過分析從代碼到依賴項的調用圖,Go 的漏洞管理工具能夠檢測是否實際調用了易受攻擊的代碼,消除了絕大多數誤報。 Go 1.24 在安全方面進一步改進,引入了對後量子密碼學的支持,所有這些都在後台透明地實現。還改進了對 FIPS 140(美國政府合規機制)的支持,可以通過運行時調試標誌或構建時標誌啟用 FIPS 模式,無需修改代碼。 ### 性能提升 Go 1.24 引入了一個基於 Swiss Tables 的全新內置 map 類型實現。從 Go 1.24 開始,map 透明地使用這個新的 Swiss Table 實現。在微基準測試中,使用新實現的 map 操作比 Go 1.23 中快了 60%,特別是對於大型 map。而且所有這些都無縫集成在 Go 的內置 map 中,無需調整代碼,只需升級即可。 此外,Go 在 1.23 和 1.24 中還引入了許多效率方面的低級工具: - Go 1.23 引入了 `unique` 包,實現了值的高效去重和比較 - Go 1.24 引入了弱指針,使開發者能夠安全地指向一個對象而不阻止它被垃圾回收 - Go 1.24 還引入了 `addCleanup` 函數,這是一種更靈活、更高效且更不容易出錯的終結化機制 ## Go 在 AI 領域的應用 Go 的高效網絡庫和結構化標籤等特性使其成為構建分佈式系統的絕佳選擇,這也是 Go 在雲基礎設施和服務中如此普遍的原因之一。這些相同的原因也使 Go 成為今天構建 AI 基礎設施和服務的絕佳選擇。 目前,許多流行的生成式 AI 工具和庫如 Ollama、LocalAI、Langchain Go、Genkit 等都是用 Go 編寫的。像之前的主要基礎設施項目一樣,這些工具和庫利用 Go 的生產力和生產就緒能力,創建高度可擴展且更可靠的關鍵服務,供各種語言生態系統的數百萬開發者用於他們的 AI 驅動工作負載。 雲和 AI 系統的共同點比你想像的要多。由於大型語言模型 (LLM) 通常需要專用的特定計算資源,它們通常作為網絡服務運行,通過 API 調用。以最近在 Go 博客上概述的檢索增強生成 (RAG) 系統為例,該系統使用向量數據庫來存儲相關文檔,在回答用戶問題時提供給 LLM。 Go 的簡潔性使得隨著 AI 系統的增長和復雜化,代碼仍能保持可讀性。Go 的特性如對象嵌入和接口允許在需求和技術變化時無縫遷移,而需求和技術總是在變化的。Go 在適應快速變化方面的能力已經使其成為雲基礎設施中一些最知名組件的成功關鍵,這些相同的特性使其成為我們構建明日 AI 基礎設施的絕佳選擇。 ## Go 1.25 及未來展望 Go 團隊透露了 Go 1.25 及以後版本的一些計劃: 1. **SIMD 支持**:這將使現代 CPU 能夠執行向量化數組操作,並行運行某些類型的循環。這些功能對於許多類型的性能優化至關重要,包括某些類型的 AI 基礎設施所需的排序。 2. **多核硬件性能改進**:包括垃圾收集器和調度器功能,更好地利用現代 CPU 架構中的非統一內存訪問。 3. **泛型操作的靈活性**:在語言方面,團隊將繼續推動提高生產力,特別是在泛型操作的靈活性方面。 團隊重申了 Go 的核心價值,保證所有這些改進和未來的變化都將繼續實現 Go 的兼容性承諾。Go 始終保持對 Go 1.0 的完全向後兼容。 ## 結語 在演講結束時,Go 團隊感謝了 Go 社區的貢獻。他們表示,雖然 Go 團隊致力於讓 Go 在未來保持生產力和生產就緒,但他們知道這並不是團隊單獨的努力。今天,Go 的生態系統比以往任何時候都更大、更健壯,不斷有高質量的工具和庫湧現,特別是針對生成式 AI 等新用例。 全球有數十萬的 Gopher(Go 開發者)聚會、參加 Go 會議並在線協作,都因為他們熱愛 Go。正是因為社區的貢獻,Go 才能持續成長並變得比以往更加重要。 欲了解更多 Go 信息或開始學習,請訪問 Go 官方網站:[go.dev](https://go.dev)。 --- *參考資料:* 1. Google I/O 2025 大會 Go 語言演講 2. [Go 1.24 Release Notes](https://go.dev/doc/go1.24) 3. [Announcing Wasm support in Go 1.24](https://cloud.google.com/blog/products/application-development/go-1-24-expands-support-for-wasm)