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 原生 map 型別的通用替代品;請參閱文件瞭解何時應使用它。
testing包也有新增內容。新增到了testing.T和testing.B的新的Helper方法,將呼叫函式標記為測試輔助函式。當 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 使用者組正在舉辦釋出派對。