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

结语

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

相关文章
相关标签/搜索