Go1.9於2017年8月24日正式發佈,新版本的Go有一些新變化:標準庫,運行時,以及新的工具。在這個版本中,Go團隊主要的工做都是在運行時的改進以及一些工具鏈的開發中。這些變化雖然不夠使人激動,可是這的確是一個很棒的更新。git
類型別名是這個版本中最重要的變化,有了類型別名以後,可以讓開發者更加便利地實現漸進升級。一個典型的類型別名能夠經過以下方式聲明:github
type T1 = T2
如此一來,T1
就是T2
的一個別名了,實際上,byte
類型就是uint8
的一個別名。type alias 文檔和重構示例文章將會有更多的細節。golang
math/bits
包新的math/bits包提供了對無符號整數進行位計數和處理的函數,這些函數針對不一樣的CPU架構體系進行了優化。例如,針對x86/64
體系,bits.TrailingZeros(x)
採用的是BSF指令。c#
在sync
包中增長了新的Map類型,該Map可以保證併發訪問的安全,若是想要獲取關於併發安全的Map的更多細節能夠閱讀GopherCon 2017 lightning talkingslides。這個Map並非爲了取代標準的Go map,請閱讀相關文檔以取得併發安全map的正確使用方法。安全
在testing
中也加入了一個新特性,那就是Helper
方法,tesing.T
和testing.B
中均添加了該方法。該方法可以標記某個測試方法是一個helper
函數,當一個測試包在輸出測試的文件和行號信息時,將會輸出調用help
函數的調用者的信息,而不是輸出helper
函數的內部信息。舉例來講:架構
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
函數標記本身爲helper
函數,若是測試失敗,即t.Fatal
函數被調用時,錯誤信息將會輸出在第11行,而不是在第7行。併發
time
如今在計時時將採用monotonic time
(流逝時間),如今在計算兩個時間差的時候將會更加安全,就算wall time
(牆上時間)被調整了。例如以下的代碼將會準確地計算流逝時間,即便當前的系統時間被修改了:ide
start := time.Now() f() elapsed := time.Since(start)
更多細節請參閱package docs和design document。函數
如今Go的編譯器將會更快,Go 1.9在包之間將並行編譯。工具
Go 1.9的更多改進和新特性參閱:Go 1.9 release notes