Go 部落格

Go 十五歲了

Austin Clements,代表 Go 團隊
2024 年 11 月 11 日


感謝 Renee French 繪製並製作了玩“15 數字謎題”的 gopher 動畫。

Go 生日快樂!

週日,我們慶祝了 Go 開源釋出十五週年!

Go 十週年以來,Go 本身和世界都發生了許多變化。在其他方面,許多東西保持不變:Go 仍然致力於穩定性、安全性和支援大規模軟體工程及生產。

Go 發展勢頭強勁!過去五年中,Go 的使用者群增長了兩倍多,使其成為增長最快的語言之一。從十五年前的起步,Go 已成為十大程式語言之一,併成為現代雲的語言。

隨著 2 月份釋出的 Go 1.22 和 8 月份釋出的 Go 1.23,今年是 for 迴圈之年。Go 1.22 將 for 迴圈引入的變數作用域設為每次迭代一次,而不是每個迴圈一次,解決了語言中一個長期存在的“陷阱”。十多年前,在 Go 1 釋出前,Go 團隊就幾個語言細節做出了決定;其中包括 for 迴圈是否應該在每次迭代中建立一個新的迴圈變數。有趣的是,討論非常簡短,而且意見並不強烈。Rob Pike 以他特有的 Rob Pike 式的方式用一個詞結束了討論:“stet”(保持原樣)。於是就這樣定了。雖然當時看來微不足道,但多年的生產經驗凸顯了這一決定的影響。然而,在這段時間裡,我們也構建了強大的工具來理解 Go 變化的 etkects,特別是對整個 Google 程式碼庫進行生態系統範圍的分析和測試,並建立了與社群合作和獲取反饋的流程。在經過廣泛的測試、分析和社群討論後,我們推出了這項變更,並附帶了一個雜湊二分工具,以幫助開發者大規模精確定位受此變更影響的程式碼。

for 迴圈的修改是五年漸進式變更軌跡的一部分。如果沒有 Go 1.21 引入的語言向前相容性,這是不可能實現的。而這又建立在四年半前 Go 1.14 中引入的 Go 模組所奠定的基礎上。

Go 1.23 在此基礎上進一步引入了迭代器和使用者定義的 for-range 迴圈。與 Go 1.18 中引入的泛型——僅僅兩年半前!——相結合,這為自定義集合和許多其他程式設計模式奠定了強大而符合人體工程學的基礎。

這些版本還在生產準備方面帶來了許多改進,包括備受期待的標準庫 HTTP 路由器增強功能執行跟蹤的全面改進以及所有 Go 應用程式的更強隨機性。此外,我們第一個 v2 標準庫包的引入為未來的庫演進和現代化奠定了模板。

在過去一年裡,我們還謹慎地為 Go 工具推出了可選遙測功能。這個系統將為 Go 開發者提供資料,以便做出更好的決策,同時完全保持開放和匿名。Go 遙測首先出現在Go 語言伺服器 gopls 中,在那裡它已經帶來了大量的改進。這項努力為讓每個人在 Go 中程式設計獲得更好的體驗鋪平了道路。

展望未來,我們正在發展 Go,以便更好地利用當前和未來硬體的能力。在過去的 15 年裡,硬體發生了很大變化。為了確保 Go 在未來 15 年繼續支援高效能、大規模的生產工作負載,我們需要適應大型多核處理器、高階指令集以及在日益非統一記憶體層次結構中區域性性的重要性。其中一些改進將是透明的。Go 1.24 在底層將有一個全新的 map 實現,在現代 CPU 上效率更高。我們正在原型設計新的垃圾回收演算法,這些演算法是圍繞現代硬體的能力和限制而設計的。一些改進將以新的 API 和工具的形式出現,以便 Go 開發者能夠更好地利用現代硬體。我們正在研究如何支援最新的向量和矩陣硬體指令,以及應用程式可以構建 CPU 和記憶體區域性性的多種方式。指導我們努力的核心原則是可組合最佳化:最佳化對程式碼庫的影響應儘可能區域性化,確保其餘程式碼庫的開發便利性不受影響。

我們將繼續確保 Go 的標準庫預設安全且設計安全。這包括持續努力整合對 FIPS 認證加密技術的內建原生支援,以便需要 FIPS 加密的應用只需翻轉一個標誌即可使用。此外,我們正在力所能及地發展 Go 的標準庫軟體包,並效仿 math/rand/v2 的例子,考慮哪些新的 API 可以顯著增強編寫安全可靠 Go 程式碼的便利性。

我們正致力於讓 Go 對 AI 更好,並讓 AI 對 Go 更好,透過增強 Go 在 AI 基礎設施、應用程式和開發者協助方面的能力。Go 是構建生產系統的優秀語言,我們也希望它成為構建生產 AI 系統的優秀語言。Go 作為雲基礎設施語言的可靠性使其成為 LLM 基礎設施 自然選擇。對於 AI 應用程式,我們將繼續在流行的 AI SDK 中構建對 Go 的一流支援,包括 LangChainGoGenkit。而且從一開始,Go 就旨在改進端到端軟體工程流程,因此我們自然而然地希望將 AI 的最新工具和技術應用於減少開發者的辛勞,留下更多時間進行有趣的事情——比如真正的程式設計!

謝謝

這一切都歸功於 Go 出色的貢獻者和蓬勃發展的社群。十五年前,我們只能夢想 Go 能取得今天的成就以及圍繞 Go 發展起來的社群。感謝所有做出貢獻的人,無論貢獻大小。我們祝大家來年一切順利。

下一篇文章:Go Protobuf: 新的 Opaque API
上一篇文章:別名 (Alias) 中有什麼?
部落格索引