Go 部落格

十四年的 Go

Russ Cox,代表 Go 團隊
2023 年 11 月 10 日

今天我們慶祝 Go 開源釋出第十四個生日!Go 有相當輝煌的一年,釋出了兩個充滿新功能的版本,並達到其他重要的里程碑。

我們在二月釋出了 Go 1.20 ,在八月釋出了 Go 1.21 ,相較於新的語言更新,更專注於實作的改進。

剖面導向最佳化(PGO)於 Go 1.20 預覽 並在 Go 1.21 釋出,讓 Go 編譯器能夠讀取您的程式剖面,然後花更多時間最佳化程式中執行最頻繁的部分。Go 1.21 中的工作負載通常能從啟用 PGO 中獲得 2% 到 7% 的 CPU 使用率提升。有關概觀,請參閱「Go 1.21 中的剖面導向最佳化」,有關完整說明,請參閱 剖面導向最佳化使用者指南

Go 在 go test 期間提供收集涵蓋範圍剖面的支援,始於 Go 1.2。Go 1.20 新增了收集由 go build 建置的二進位檔案中涵蓋範圍剖面的支援,讓您也能在較大的整合測試期間收集涵蓋範圍。有關詳情,請參閱「Go 整合測試的程式碼涵蓋範圍」。

相容性一直是 Go 的重要部分,自「Go 1 與 Go 程式未來」以來就是如此。Go 1.21 進一步改善相容性,擴充在需要進行變更(例如可能還會中斷現有程式,但必須允許的重要錯誤修正)時使用 GODEBUG 的慣例。可參考部落格文章「後向相容性、Go 1.21 和 Go 2」以取得概觀,以及文件「Go、後向相容性和 GODEBUG」以取得詳細資訊。

Go 1.21 也隨附內建工具鏈管理支援,讓使用者可以輕易變更特定模組中所使用的 Go 工具鏈版本,就像變更其他依賴項版本一樣容易。可參考部落格文章「Go 1.21 中的前向相容性和工具鏈管理」以取得概觀,以及文件「Go 工具鏈」以取得詳細資訊。

另一項重要的工具相關成就,是將磁碟索引整合至 Go LSP 伺服器 gopls。在一般使用案例中,這讓 gopls 的啟動延遲和記憶體使用量減少了 3 到 5 倍。「針對不斷發展的 Go 生態系統擴充 gopls」說明了技術上的詳細資訊。使用者可以執行下列指令,以確定自己執行的是最新版本的 gopls

go install golang.org/x/tools/gopls@latest

Go 1.21 引進了新的 cmpmapsslices 套件(Go 的第一個泛型標準函式庫),並擴充了可比較的類型集合。若要取得相關詳細資訊,請參閱部落格文章「使用者所有的可比較類型」。

總體而言,我們持續改良泛型,並撰寫簡報和部落格文章來解釋重要的詳細資訊。今年有兩篇值得注意的文章,分別是「解構型別參數」,以及「使用者一直想知道的關於型別推論的一切,以及更多」。

Go 1.21 中的另一項重要新套件為 log/slog,這為標準函式庫新增了結構化日誌記錄的官方 API。請參閱「使用 slog 進行結構化日誌記錄」以取得概觀。

針對 WebAssembly (Wasm) 移植,Go 1.21 隨附在 WebAssembly 系統介面 (WASI) 預覽版 1 上執行的支援。WASI 預覽版 1 是 WASM 的新「作業系統」介面,並由大部分伺服器端 WASM 環境支援。請參閱「Go 中的 WASI 支援」以取得完整說明。

在安全性方面,我們持續確保 Go 在協助開發人員了解其相依性及漏洞方面處於領先地位,Govulncheck 1.0 於 7 月推出。如果您使用 VS Code,您可以使用 Go 擴充功能直接在您的編輯器中執行 govulncheck:請參閱這份教學內容以開始使用。如果您使用 GitHub,您可以將 govulncheck 作為 CI/CD 的一部分執行,方法是使用 針對 govulncheck 的 GitHub Action。如需深入瞭解如何檢查您的相依性是否有漏洞問題,請參閱今年的 Google I/O 演講「使用 Go 和 Google 建立更安全的應用程式」)。

Go 1.21 中高度可重製的工具鏈建置是另一個重要的安全性里程碑。詳情請參閱「完美可重製,已驗證的 Go 工具鏈」,其中包括在 Mac 上重製 Ubuntu Linux Go 工具鏈且完全不使用任何 Linux 工具的示範。

這一年過得非常充實!

在 Go 的第 15 年中,我們將持續努力,讓 Go 成為規模化軟體工程的最佳環境。我們特別興奮的一項變更,是重新定義 for 迴圈 := 語意,以消除潛在的意外別名錯誤。詳情請參閱「在 Go 1.22 中修復 for 迴圈」,其中包含在 Go 1.21 中預覽此變更的說明。

謝謝!

Go 專案一直遠遠不只是我們在 Google 的 Go 團隊。感謝所有貢獻者和 Go 社群中的每個人,讓 Go 成為今日的樣貌。我們祝願大家來年一切順利。

下一篇:2023 年 H2 Go 開發人員調查結果
上一篇:關於類型推論您一直想知道的所有事情 - 以及更多內容
部落格索引