Go 部落格

Go 1.9 已釋出

Francesc Campoy
2017 年 8 月 24 日

今天,Go 團隊很榮幸宣布 Go 1.9 已釋出。您可以從 下載頁面 取得。於語言、標準函式庫、執行時間和工具上都有許多變更。這篇文章涵蓋了其中最顯著的部分。在這項版本中,多數的工程工作都投注在執行時間和工具的改善,此類改進並無帶來令人興奮的全新功能,但這仍是個很讚的版本。

語言中最重要的變更是導入型別別名:這是為了支援漸進式程式碼修復而建立的功能。型別別名宣告採用以下格式

type T1 = T2

這個宣告引入一個 T1 別名,用於型別 T2,類似於 byte 一直都是 uint8 的別名。型別別名設計文件重構文章 中更詳細地介紹了這項新增功能。

新的 math/bits 套件提供未簽署整數的位元計算和處理功能,適用時會透過特殊的 CPU 指令來執行。例如,在 x86-64 系統上,bits.TrailingZeros(x) 會使用 BSF 指令。

sync 套件新增了一個新的 Map 類型,可安全地並發存取。你可以從其文件進一步瞭解這個類型,並從這場 GopherCon 2017 快閃演講投影片)中進一步瞭解這個類型為何新增。它並非 Go 地圖類型的通用替換;請參閱文件以瞭解何時應該使用它。

testing 套件也新增了一項功能。新的 Helper 方法新增至 testing.Ttesting.B,它將呼叫函數標記為測試輔助函數。當 testing 套件列印檔案和行資訊時,它會顯示呼叫輔助函數的位置,而不是輔助函數本身的行資訊。

例如,考量這個測試

package p

import "testing"

func failure(t *testing.T) {
    t.Helper() // This call silences this function in error reports.
    t.Fatal("failure")
}

func Test(t *testing.T) {
    failure(t)
}

由於 failure 已標示自己是測試輔助函數,因此 Test 期間列印的錯誤訊息會指出第 11 行,即 failure 被呼叫的位置,而不是第 7 行,即 failure 呼叫 t.Fatal 的位置。

time 套件現在在每個 Time 值中透明追蹤單調時間,讓在時鐘調整時計算兩個 Time 值之間的持續時間變成安全的作業。例如,這個程式碼現在會在閏秒時鐘重設時計算出正確的經過時間

start := time.Now()
f()
elapsed := time.Since(start)

請參閱 套件文件設計文件以取得詳細資訊。

最後,作為讓 Go 編譯器加速的專案的一部份,Go 1.9 並發編譯套件中的函數。

Go 1.9 包含許多其他新增功能、改善與修正。在 Go 1.9 發行說明 中尋找完整的變更清單,以及上述改善的更多資訊。

為慶祝此版本發布,全球各地的 Go 使用者社群將會舉行 發布會

下一篇:社群宣導小組
上一篇:貢獻者工作坊
部落格首頁