Go1.9的主要更新(記回家的火車上)

關於

sheepbao 2017.06.16
世上千般傷心事,惟有生離與死別。但願奶奶在天堂幸福,不孝孫子正在回家的路上。
臥鋪時漫長,遂有此文。golang

Go1.9的主要更新

golang每半年更新一次版本,上次最新的版本是Go1.8,而Go1.9將在今年8月釋出。
Go1.9中語法的更改只有一個,那就是增長了類型別名,大部分更改是工具鏈,運行時,庫的更改,安全

語法的更改

Go1.9中增長了類型別名這個語法,類型別名能夠更優雅的實現當兩個包之間struct的移動。類型別名的語法以下:併發

type T1 = T2

意思是聲明一個T2類型的別名T1.函數

工具

並行編譯

在Go1.9中並行編譯啊包是默認的設置,若是須要關閉並行編譯,須要設置環境變量GO19CONCURRENTCOMPILATION=0工具

./...能夠匹配vendor了

應各位親們的要求,以前./...不支持匹配vendor目錄下的文件,如今Go1.9支持了。性能

性能

一般來講,很難去描述這些更改對各類場景的性能影響。大部分程序都應該運行的更快了,由於gc的提高,代碼生成的更好和核心庫的優化。優化

垃圾回收

在Go1.9以前,不少庫函數都是會觸發stop-the-world的,而如今只會觸發併發的垃圾回收。好比:runtime.GC,debug.SetGCPerent and debug.FreeOSMemory,如今只會觸發併發的垃圾回收,只會阻塞當前正在調用的goroutine,直到gc完成。
debug.SetGCPrercent函數。。。 大對象的分配性能顯著的提升,當應用程序使用超大的堆(>50G),裏面包含許多大對象。線程

runtime.ReadMemStats函數如今讀取大堆的時間少於100us。debug

核心庫

併發的map

好吧,終於官方支持了,在sync包中新增了Map類型,這個Map是線程安全的map。code

time包支持顯示單調

Go1.9的time包支持每一個Time值都是單調時間,這樣能使當系統時間改變的時候,計算兩個時間差也是安全的。具體看package docsdesign doc

新的位操做包

Go1.9新增了一個包,叫math/bits,提供一些位操做的優化。

參考

go1.9 release notes

結語

一直不敢相信奶奶走了。。

相關文章
相關標籤/搜索