Go 部落格

Go 迎來 15 週年

Austin Clements,來自 Go 團隊
2024 年 11 月 11 日


感謝 Renee French 繪製並製作了 gopher 玩“15 拼圖”的動畫。

生日快樂,Go!

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

Go 十週年紀念以來,Go 語言本身和整個世界都發生了巨大的變化。從另一方面來看,很多東西也保持不變:Go 始終致力於穩定性、安全性,以及大規模軟體工程和生產環境的支援。

Go 依然蓬勃發展!過去五年裡,Go 的使用者群增長了兩倍多,使其成為增長最快的語言之一。短短十五年前,Go 已經發展成為排名前十的語言,也是現代雲的語言。

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

對 `for` 迴圈的更改是過去五年穩步改進的一部分。如果沒有 Go 1.21 中引入的 向前語言相容性,這一切將不可能實現。而這又建立在四年前半 Go 1.14 中引入的 Go 模組所奠定的基礎上。

Go 1.23 在此基礎上進一步發展,引入了迭代器和 使用者定義的 for-range 迴圈。結合兩年前半 Go 1.18 中引入的泛型,這為自定義集合和許多其他程式設計模式建立了一個強大且符合人體工程學的[foundation](https://golang.org.tw/blog/generics-preview)。

這些版本還帶來了許多在生產就緒方面的改進,包括對標準庫 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 在人工智慧基礎設施、應用程式和開發者協助方面的能力,致力於讓 Go 在人工智慧領域做得更好——並讓人工智慧對 Go 更好。Go 是構建生產系統的優秀語言,我們也希望它成為 構建生產 *人工智慧* 系統 的優秀語言。Go 作為雲基礎設施語言的可靠性使其成為 LLM 基礎設施 其他 的自然選擇。對於人工智慧應用程式,我們將繼續在流行的 AI SDK 中為 Go 提供一流的支援,包括 LangChainGoGenkit。從一開始,Go 就旨在改進端到端的軟體工程流程,因此,我們自然而然地希望將人工智慧的最新工具和技術應用於減少開發者的重複勞動,讓他們有更多時間去做有趣的事情——比如實際程式設計!

謝謝

這一切都歸功於 Go 令人難以置信的貢獻者和蓬勃發展的社群。十五年前,我們只能夢想 Go 能取得今天的成功,以及圍繞 Go 發展的社群。感謝每一位或大或小的參與者。祝願大家在新的一年裡一切順利。

下一篇文章:Go Protobuf:新的 Opaque API
上一篇文章:(別名)名稱中有何含義?
部落格索引