Go 部落格
Go 1.9 已釋出
今天,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.T 和 testing.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 使用者社群將會舉行 發布會。