Go 部落格

Go 1.6 已發布

Andrew Gerrand
2016 年 2 月 17 日

今天我們發布 Go 版本 1.6,這是 Go 的第七次主要穩定版本。您可以立即從 下載頁面 取得。雖然 六個月前發布的 Go 1.5 包含戲劇性的實作變更,但這個版本較為漸進。

最重大的變更是在 net/http 套件 中支援 HTTP/2HTTP/2 是一個新的協定,作為 HTTP 的後繼協定,瀏覽器廠商和主要網站已廣泛採用此協定。在 Go 1.6 中,使用 HTTPS 時,伺服器和客戶端的 HTTP/2 支援 預設已啟用,為大量 Go 專案帶來新協定的 優點,像是熱門的 Caddy Web 伺服器

範本套件已學了一些新技巧,支援修剪範本動作附近的空白以產生更乾淨的範本輸出,並介紹可{{block}} 動作,用來建立建立於其他範本之上的範本。新的範本範例程式示範了這些新功能。

Go 1.5 提出試驗性支援,透過環境變數啟用「供應商」目錄。Go 1.6 中,此功能現預設啟用。包含名為「供應商」目錄但未依新功能使用之來源樹,將需要變更以避免產生中斷組建(最簡單的修正為變更目錄名稱)。

執行時期環境加入了輕量、盡最大努力檢測地圖並發錯誤使用的功能。如同往常,若有一個 goroutine 正在寫入地圖,其他 goroutine 不應同時讀取或寫入地圖。若執行時期環境偵測到此狀況,將印出診斷結果並使程式當機。找出問題的最佳方式是透過競爭偵測器執行,這將更可靠地找出競爭並提供更多詳細資料。

執行時期環境也變更了它印出程式的結束 panic 方式。現在只印出發生 panic 之 goroutine 的堆疊,而非所有現有的 goroutine。此行為可透過使用 GOTRACEBACK 環境變數或呼叫 debug.SetTraceback 函式來設定。

cgo 使用者應注意,在 Go 和 C 程式碼之間分享指標的規則有重大變更。這些規則旨在確保此類 C 程式碼可與 Go 的垃圾收集器共存,並在程式執行期間進行檢查,因此程式碼可能需要變更以避免當機。請參閱 發行說明cgo 文件以取得詳細資料。

編譯器、連結器和 go 命令有一個新的 -msan 旗標,與 -race 類似,且僅在 linux/amd64 上提供,可啟用與 Clang MemorySanitizer 的交互操作。這對於測試包含可疑 C 或 C++ 程式碼的程式很有用。您可能會想在使用新的指標規則測試 cgo 程式碼時試試看。

使用 Go 1.6 建置的 Go 程式效能與使用 Go 1.5 建置者相近。垃圾回收暫停時間甚至低於使用 Go 1.5 的暫停時間,但這對於使用大量記憶體的程式來說特別有感。關於編譯工具鏈的效能,建置時間應與 Go 1.5 相近。

sort.Sort 內部的演算法進行了改良,執行速度快了約 10%,但此變更可能會影響預期相等但可辨別元素以特定順序排列的程式。此類程式應改良其 Less 方法,用以指示所需的順序或使用 sort.Stable 來保留相等值的輸入順序。

當然,還有許多其他新增功能、改良和修正事項。您可以在詳細的 發行說明 中找到所有內容。

為了歡慶此次發行,全球各地的 Go 使用者社群 將在 2 月 17 日舉辦發行派對。線上部分,Go 貢獻者會在 golang subreddit 上舉辦問答活動,時程為接下來的 24 小時。如果您對專案、發行版本或一般性的 Go 有任何疑問,請 加入討論

謝謝所有為此版本做出貢獻的人。開發愉快。

下一篇:Go 1.7 發行了
前一篇文章:關於 Go 中的語言和地區比對
部落格索引