Go 1.9 的新特性

xlion7 7年前發布 | 21K 次閱讀 Go語言 Google Go/Golang開發

現在 Go 1.9 beta版已發布, 正式版預期在8月初發布,讓我們先來看看你Go 1.9帶來了那些新特性。

type alias

類型別名原本在1.8中加入的,但是臨時發現有些問題,為了能全面的設計type alias被移到了 Go 1.9中了。

這個特性主要用在類型從一個package移動到另外一個package中的時候,導致的項目中對引入的路徑不一致導致的問題, 比如原先context是在golang.org/x/net/context包下,在Go 1.7中菜正式移到標準庫context。

相關的issue: go#16339 go#18130

提案: type alias

并發map

在Go 1.6之前, 內置的map類型是部分goroutine安全的,并發的讀沒有問題,并發的寫可能有問題。自go 1.6之后, 并發地讀寫map會報錯,這在一些知名的開源庫中都存在這個問題,所以go 1.9之前的解決方案是額外綁定一個鎖,封裝成一個新的struct或者單獨使用鎖都可以。

群眾的呼聲是響亮的,并發map在項目中大量使用,所以Go 1.9中在包sync加入了新的map, 查詢、存儲和刪除都是平均常數時間,可以并發訪問。

Monotonic Time

先前的time包的實現都是基于wall time的,但是當機器的時鐘調整后會有問題。 比如在計算duration的時候,如果時鐘往回撥,可能導致end時間比start時間還早。

所以Go 1.9使用monotonic Time來實現大部分的time中的函數,在計算duration的時候不會出現因為時鐘調整出現的誤差了。

設計文檔: monotonic time

位處理操作

新增加了math/bits包, 提供了很多位運算的函數。

Test Helper函數

新加`(T).Helper和(B).Helper m`, 用來標記調用的函數是一個測試輔助函數,當輸出文件名和行數的時候,這個函數回唄忽略。

標準庫的微小改動

標準庫也有一些小的功能的加入和提升, 比如image、net、runtime、sync等。

并行編譯

支持并行地編譯函數,并且在Go 1.9中勢默認設置。如果不想并行編譯,設置GO19CONCURRENTCOMPILATION為0。

./... 會忽略vendor下的包

這一條很有用,以后你在Makefile中可以直接使用./...,而不是曲折地將vendor文件夾排除。

如果你想使用vendor下的包, 可以使用./vendor/...通配符。

性能提升

性能提升多少勢很難精確描述的,對于大部分的程序,應該運行更快一點。

主要在于垃圾回收器的優化、更好的生成的代碼以及核心庫的優化。

完整的信息可以參考 Tip Go 1.9 Release Notes , Go 1.9發布后可以訪問 Go 1.9 Release Notes

 

來自:http://www.udpwork.com/item/16315.html

 

 本文由用戶 xlion7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!