Go 部落格
Go 已滿 15 歲

謝謝 Renee French 繪製和製作讓地鼠解「15 拼圖」的動畫。
生日快樂,Go!
星期日,我們慶祝了 Go 開源程式發佈 的 15 周年!
自 Go 的 10 周年紀念 以來,Go 與世界都已發生許多改變。另一方面,也有許多事項不變:Go 仍然致力於穩定性、安全性,並支援軟體工程和大規模生產。
而 Go 的發展勢頭強勁!Go 的使用者基礎在過去五年成長超過三倍,使它成為成長最快速的語言之一。從 15 年前的最初開始,Go 已成為排名前 10 的語言和現代雲端語言。
隨著 2 月發佈 Go 1.22,以及 8 月發佈 Go 1.23,這將成為for
循環的一年。Go 1.22 建立的變數由 for
循環每個迭代範圍,而非每個循環範圍,解決了長久以來的程式語言「難題」。在十幾年前,在 Go 1 發佈的過程中,Go 團隊決定了語言的幾個細節;其中包括 for
循環是否應該在每次迭代時建立新的循環變數。有趣的是,相關討論非常簡短,明顯不帶任何意見。Rob Pike 以他一貫的 Rob Pike 風格以一個單字「stet」(保持不變)結束了這場討論。於是這件事就這樣了。儘管當時看起來微不足道,但多年的實際經驗凸顯了此項決定的影響。但在那段時間,我們也建構了強健的工具,用來理解 Go 改變的影響:值得注意的是,生態系統層級的分析和測試涵蓋了整個 Google 程式碼庫,並建立了與社群合作並取得回饋的流程。在經過廣泛測試、分析和社群討論之後,我們推出了這項改變,並配備一個哈希二分工具,協助開發人員在更大規模上找出受此變動影響的程式碼。
對for
循環的改變是一個經過五年規劃的審慎改動時間表的一部分。若沒有 Go 1.21 引進的向前語言相容性,這場改變是不可能發生的。這件事反過來又建立在 Go 模組所奠定的基礎上,而 Go 模組是四個半年前在 Go 1.14 中引進的。
Go 1.23 進一步建構在這個改變上,引進了迭代器和 使用者定義的 for-range 循環。結合了泛型(僅在兩年半前的 Go 1.18 中引入!)之後,它為自訂集合和其他許多程式設計模式建立了強大且符合人體工學的基礎。
這些發佈版本也帶來了許多在正式推出時的改善,包括針對標準函式庫 HTTP 路由器期待已久的改善、徹底改造的執行追蹤,以及所有 Go 應用程式都適用的更強隨機性。此外,我們的首個 v2 標準函式庫套件的引進也為未來函式庫的演進和現代化建立了一個範本。
去年,我們也開始謹慎地對 加入遙測 進行 Go 工具。此系統將會提供 Go 的開發人員資料,以做出更好的決策,同時完全保持 開放 和匿名。Go 遠端監測首先出現在 gopls 中,這是 Go 的語言伺服器,它已經導致 一連串的改進。這些努力為讓 Go 的程式設計更普及至所有人鋪平了道路。
展望未來,我們正在改造 Go 以更好地利用當前和未來的硬體功能。在過去的 15 年裡,硬體已經有很大改變。為了確保 Go 能夠持續在 接下來 的 15 年支援高性能、大規模生產工作負載,我們需要適應大型多核心、進階指令集,以及在 increasingly non-uniform memory 階層結構中,本機的重要性日益提升。其中一些改進將很明顯。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 的一級支援,包括 LangChainGo 和 Genkit。Go 從一開始就旨在改善端到端的軟體工程流程,因此我們自然著眼於使用 AI 的最新工具和技術來減少開發人員的辛勞,讓他們有更多時間從事有趣的事物,例如執行程式設計!
感謝您
所有這一切能實現都要歸功於 Go 非凡的貢獻者和蓬勃發展的社群。十五年前,我們只能夢想到 Go 如今的成功,以及圍繞 Go 發展的社群。感謝每個參與過大大小小事務的人。我們祝您們新的一年一切順利。
上一篇文章:(別名)名稱的含義是什麼?
部落格索引