Go 1.9 新特性

Go1.9於2017年8月24日正式發佈,新版本的Go有一些新變化:標準庫,運行時,以及新的工具。在這個版本中,Go團隊主要的工做都是在運行時的改進以及一些工具鏈的開發中。這些變化雖然不夠使人激動,可是這的確是一個很棒的更新。git

Type alias

類型別名是這個版本中最重要的變化,有了類型別名以後,可以讓開發者更加便利地實現漸進升級。一個典型的類型別名能夠經過以下方式聲明:github

type T1 = T2

如此一來,T1就是T2的一個別名了,實際上,byte類型就是uint8的一個別名。type alias 文檔重構示例文章將會有更多的細節。golang

math/bits

新的math/bits包提供了對無符號整數進行位計數和處理的函數,這些函數針對不一樣的CPU架構體系進行了優化。例如,針對x86/64體系,bits.TrailingZeros(x)採用的是BSF指令。c#

Concurrent map

sync包中增長了新的Map類型,該Map可以保證併發訪問的安全,若是想要獲取關於併發安全的Map的更多細節能夠閱讀GopherCon 2017 lightning talkingslides。這個Map並非爲了取代標準的Go map,請閱讀相關文檔以取得併發安全map的正確使用方法。安全

testing Helper

testing中也加入了一個新特性,那就是Helper方法,tesing.Ttesting.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行。併發

monotonic time

time如今在計時時將採用monotonic time(流逝時間),如今在計算兩個時間差的時候將會更加安全,就算wall time(牆上時間)被調整了。例如以下的代碼將會準確地計算流逝時間,即便當前的系統時間被修改了:ide

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

更多細節請參閱package docsdesign document函數

更快的編譯速度

如今Go的編譯器將會更快,Go 1.9在包之間將並行編譯。工具

更多細節

Go 1.9的更多改進和新特性參閱:Go 1.9 release notes

相關文章
相關標籤/搜索