# Go 1.9 新特性

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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

Type alias

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

type T1 = T2

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

math/bits

新的math/bits包提供了對不帶正負號的整數進行位計數和處理的函數,這些函數針對不同的CPU架構體系進行了最佳化。例如,針對x86/64體系,bits.TrailingZeros(x)採用的是BSF指令。

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 pimport "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(牆上時間)被調整了。例如如下的代碼將會準確地計算流逝時間,即使當前的系統時間被修改了:

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

更多細節請參閱package docs和design document。

更快的編譯速度

現在Go的編譯器將會更快,Go 1.9在包之間將並行編譯。

更多細節

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.