Go 是一種並發的編譯型編程語言,具有受 C 語法啟發的靜態類型。
Go 1.22新版本在1.21 版本發布六個月後推出,在工具集、運行時、最佳化改進、編譯器增強和庫方面進行了許多顯著的變化。
對於不熟悉 Go 語言的人,我應該提一下,它是由 Google 開發的程式語言,社群也參與其中,它是一種混合解決方案,結合了編譯型語言的高效能和腳本語言的優勢,例如易於編寫程式碼、開發速度快和錯誤保護。
Go 1.22的主要新功能
從 Go 1.22 版本開始引入的新版本中,for 迴圈有兩個顯著變化。先前,for 迴圈宣告的變數只會建立一次,並在每次迭代中更新。在 Go 1.22 版本中,每次循環迭代都會建立新變量,以防止意外的共享錯誤。此外,還添加了對 for 循環中 range 函數的實驗性支援(GOEXPERIMENT=rangefunc),允許將函數指定為迭代器。 for迴圈中長期存在的協程呼叫會在迭代之間共享循環變數的問題也得到了解決。此外,for 迴圈現在可以遍歷整數。例如:
package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 起飛!") }
新版本中另一個顯著的變化是引入了使用包含工作區依賴項的「 vendor」目錄的功能。現在命令可以使用此目錄,該目錄透過 ` go work vendor`創建,並在建置命令中,當 ` -mod`設定為「vendor 」時使用。當工作區中存在“vendor”目錄時,預設為“ vendor ”。
需要注意的是,在舊版GOPATH模式下, ` go get`指令在模組之外不再受支援。但是,其他建置指令(例如`go build` 和 `go test`)將繼續對舊版 GOPATH 程式無限期有效。此外, `go mod init`指令將不再嘗試從其他供應商工具的設定檔(例如 Gopkg.lock)匯入模組相依性。
Go 1.22 引入了一個新的io/unsafe包,它提供了處理指標和不安全記憶體的功能。該套件提供了將指標從安全類型轉換為不安全類型的方法,以及在不檢查邊界的情況下執行記憶體複製操作的方法。
我們繼續推進基於PGO 程式碼分析結果的編譯器最佳化工作。現在,編譯器使用去虛擬化工具,將各種方法中的間接呼叫替換為執行展開的內聯程式碼區塊。啟用 PGO 後,這項改進使大多數程式的效能提升了 2% 到 14%。
在Windows 版 Go 中,連結到或載入使用-buildmode=c-archive或-buildmode=c-shared建立的 Go 函式庫的程式現在可以透過新的runtime/trace和tracehook套件使用 Windows 事件日誌記錄 (ETW) API,這些套件實作了 Go 事件追蹤協定作為 ETW 提供者。
在其他突出的變化中:
- 命令 去測試覆蓋 現在列印沒有自己的測試文件的覆蓋包的覆蓋摘要。
- 作業系統/執行,新增了定義上下文屬性的功能,可讓您設定執行命令的工作目錄、環境變數和輸入/輸出檔案描述符等值。
- 優化運行時記憶體管理,使大多數應用程式的效能提高 1-3%,記憶體消耗降低 1%。
- 埃爾帕克特 網絡/http,該功能已新增 關閉空閒連接 發送給HTTP客戶端,關閉客戶端最近使用過的所有空閒連接
- 編譯器中加入了呼叫插入機制的改進實驗實作 (GOEXPERIMENT=newinliner),它使用啟發式方法將重要操作與不重要操作分開。
- 包已新增 » 數學/蘭德/v2 » 標準函式庫,它提供了更一致的 API 並使用更快的演算法來產生偽隨機數。
- 埃爾帕克特 網/http.ServeMux 新增了在模板中指定方法和遮罩的功能。
最後,如果您有興趣了解更多信息,可以點擊以下鏈接查看詳情。